{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7b19b8d9",
   "metadata": {},
   "source": [
    "# 环境准备"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "16977105",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:48.748414Z",
     "start_time": "2024-10-29T17:16:42.584579Z"
    }
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.stats import chi2_contingency\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "pd.set_option('display.width', 10000)\n",
    "pd.set_option('display.max_rows', None)\n",
    "pd.set_option('display.max_columns', None)\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.rcParams['font.sans-serif'] = ['STSong']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "30358598",
   "metadata": {},
   "source": [
    "# 数据准备"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "47ccc1db",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:48.967087Z",
     "start_time": "2024-10-29T17:16:48.754319Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>客户年龄</th>\n",
       "      <th>工作类型</th>\n",
       "      <th>婚姻状况</th>\n",
       "      <th>教育水平</th>\n",
       "      <th>是否有过违约</th>\n",
       "      <th>是否有住房贷款</th>\n",
       "      <th>是否有个人贷款</th>\n",
       "      <th>联系方式</th>\n",
       "      <th>上次联系月份</th>\n",
       "      <th>上次联系周几</th>\n",
       "      <th>最后一次通话时间</th>\n",
       "      <th>本次营销活动联系次数</th>\n",
       "      <th>距离上次联系间隔天数</th>\n",
       "      <th>上次营销活动联系次数</th>\n",
       "      <th>上次营销活动结果</th>\n",
       "      <th>就业变化率</th>\n",
       "      <th>消费者价格指数</th>\n",
       "      <th>消费者信息指数</th>\n",
       "      <th>euribor 3月费率</th>\n",
       "      <th>员工人数</th>\n",
       "      <th>是否订阅</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>56</td>\n",
       "      <td>女佣</td>\n",
       "      <td>已婚</td>\n",
       "      <td>辍学</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>移动电话</td>\n",
       "      <td>may</td>\n",
       "      <td>mon</td>\n",
       "      <td>261</td>\n",
       "      <td>1</td>\n",
       "      <td>999</td>\n",
       "      <td>0</td>\n",
       "      <td>不存在</td>\n",
       "      <td>1.1</td>\n",
       "      <td>93.994</td>\n",
       "      <td>-36.4</td>\n",
       "      <td>4.857</td>\n",
       "      <td>5191.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>57</td>\n",
       "      <td>服务</td>\n",
       "      <td>已婚</td>\n",
       "      <td>高中</td>\n",
       "      <td>未知</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>移动电话</td>\n",
       "      <td>may</td>\n",
       "      <td>mon</td>\n",
       "      <td>149</td>\n",
       "      <td>1</td>\n",
       "      <td>999</td>\n",
       "      <td>0</td>\n",
       "      <td>不存在</td>\n",
       "      <td>1.1</td>\n",
       "      <td>93.994</td>\n",
       "      <td>-36.4</td>\n",
       "      <td>4.857</td>\n",
       "      <td>5191.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>37</td>\n",
       "      <td>服务</td>\n",
       "      <td>已婚</td>\n",
       "      <td>高中</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>移动电话</td>\n",
       "      <td>may</td>\n",
       "      <td>mon</td>\n",
       "      <td>226</td>\n",
       "      <td>1</td>\n",
       "      <td>999</td>\n",
       "      <td>0</td>\n",
       "      <td>不存在</td>\n",
       "      <td>1.1</td>\n",
       "      <td>93.994</td>\n",
       "      <td>-36.4</td>\n",
       "      <td>4.857</td>\n",
       "      <td>5191.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>40</td>\n",
       "      <td>行政</td>\n",
       "      <td>已婚</td>\n",
       "      <td>小学</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>移动电话</td>\n",
       "      <td>may</td>\n",
       "      <td>mon</td>\n",
       "      <td>151</td>\n",
       "      <td>1</td>\n",
       "      <td>999</td>\n",
       "      <td>0</td>\n",
       "      <td>不存在</td>\n",
       "      <td>1.1</td>\n",
       "      <td>93.994</td>\n",
       "      <td>-36.4</td>\n",
       "      <td>4.857</td>\n",
       "      <td>5191.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>56</td>\n",
       "      <td>服务</td>\n",
       "      <td>已婚</td>\n",
       "      <td>高中</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>移动电话</td>\n",
       "      <td>may</td>\n",
       "      <td>mon</td>\n",
       "      <td>307</td>\n",
       "      <td>1</td>\n",
       "      <td>999</td>\n",
       "      <td>0</td>\n",
       "      <td>不存在</td>\n",
       "      <td>1.1</td>\n",
       "      <td>93.994</td>\n",
       "      <td>-36.4</td>\n",
       "      <td>4.857</td>\n",
       "      <td>5191.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   客户年龄 工作类型 婚姻状况 教育水平 是否有过违约 是否有住房贷款 是否有个人贷款  联系方式 上次联系月份 上次联系周几  最后一次通话时间  本次营销活动联系次数  距离上次联系间隔天数  上次营销活动联系次数 上次营销活动结果  就业变化率  消费者价格指数  消费者信息指数  euribor 3月费率    员工人数  是否订阅\n",
       "0    56   女佣   已婚   辍学      否       否       否  移动电话    may    mon       261           1         999           0      不存在    1.1   93.994    -36.4         4.857  5191.0     0\n",
       "1    57   服务   已婚   高中     未知       否       否  移动电话    may    mon       149           1         999           0      不存在    1.1   93.994    -36.4         4.857  5191.0     0\n",
       "2    37   服务   已婚   高中      否       是       否  移动电话    may    mon       226           1         999           0      不存在    1.1   93.994    -36.4         4.857  5191.0     0\n",
       "3    40   行政   已婚   小学      否       否       否  移动电话    may    mon       151           1         999           0      不存在    1.1   93.994    -36.4         4.857  5191.0     0\n",
       "4    56   服务   已婚   高中      否       否       是  移动电话    may    mon       307           1         999           0      不存在    1.1   93.994    -36.4         4.857  5191.0     0"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 距离上次联系间隔天数：999\n",
    "train = pd.read_csv('../001.Dataset/train.csv')\n",
    "test = pd.read_csv('../001.Dataset/test.csv')\n",
    "\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c02e8cc7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:48.983901Z",
     "start_time": "2024-10-29T17:16:48.969641Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "客户年龄\n",
      "工作类型\n",
      "婚姻状况\n",
      "教育水平\n",
      "是否有过违约\n",
      "是否有住房贷款\n",
      "是否有个人贷款\n",
      "联系方式\n",
      "上次联系月份\n",
      "上次联系周几\n",
      "最后一次通话时间\n",
      "本次营销活动联系次数\n",
      "距离上次联系间隔天数\n",
      "上次营销活动联系次数\n",
      "上次营销活动结果\n",
      "就业变化率\n",
      "消费者价格指数\n",
      "消费者信息指数\n",
      "euribor 3月费率\n",
      "员工人数\n",
      "是否订阅\n"
     ]
    }
   ],
   "source": [
    "for i in train.columns.tolist():\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94a3b260",
   "metadata": {},
   "source": [
    "# 连续型特征分箱"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "3593b335",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:49.004193Z",
     "start_time": "2024-10-29T17:16:48.987450Z"
    }
   },
   "outputs": [],
   "source": [
    "### 数值型可用的分箱代码\n",
    "def decision_tree_binning(X, y, max_leaf_node=10, min_samples=0.05, **kwargs):\n",
    "    \"\"\"决策树分箱\n",
    "    :param X: 特征变量（list、series 或 array）\n",
    "    :param y: 目标变量（list、series 或 array）\n",
    "    :param max_leaf_node: 最大分支数\n",
    "    :param min_samples: 分支最小样本占比\n",
    "    :return: 返回分箱的阈值（不包括两端的边界值）\n",
    "    \"\"\"\n",
    "    # 将 X 转换为 numpy 数组\n",
    "    X = np.asarray(X).reshape(-1, 1)  # 确保 X 是列向量\n",
    "    y = np.asarray(y)\n",
    "\n",
    "    if len(np.unique(y)) < 2:\n",
    "        raise ValueError(\"The target variable y must contain at least two unique values.y\")\n",
    "    else:\n",
    "        total_samples = len(X)  # 计算数据长度\n",
    "        min_samples_leaf_threshold = max(int(min_samples * total_samples), 5)  # 计算节点最小样本\n",
    "\n",
    "        clf = DecisionTreeClassifier(\n",
    "            min_samples_split=min_samples_leaf_threshold,\n",
    "            min_samples_leaf=min_samples_leaf_threshold,\n",
    "            max_leaf_nodes=max_leaf_node,\n",
    "            random_state=12,\n",
    "            **kwargs\n",
    "        )\n",
    "\n",
    "        # 拟合模型\n",
    "        clf.fit(X, y)\n",
    "\n",
    "        # 输出分箱结果\n",
    "        bin_edges = clf.tree_.threshold\n",
    "        bin_edges = bin_edges[bin_edges != -2]  # 去除非叶子节点的值\n",
    "        bin_edges.sort()\n",
    "\n",
    "        return bin_edges\n",
    "\n",
    "\n",
    "def check_monotonicity(X, y, bins, right=True):\n",
    "    \"\"\"判断分箱后目标正样本占比是否单调\n",
    "    :param X: 特征变量\n",
    "    :param y: 目标变量\n",
    "    :param bins: 分箱阈值，列表或数组\n",
    "    :param right: 是否右闭区间\n",
    "    :return: 返回 1 表示递增，-1 表示递减，0 表示非单调\n",
    "    \"\"\"\n",
    "    x_split_bins = np.digitize(X, bins, right=right)\n",
    "    temp_df = pd.DataFrame({\n",
    "        'X': x_split_bins,\n",
    "        'y': y\n",
    "    })\n",
    "    group_df = temp_df.groupby(by='X').agg(func={'X': 'count', 'y': 'sum'})\n",
    "    label_ratio = (group_df['y'] / group_df['X']).tolist()\n",
    "\n",
    "    if all(label_ratio[i] <= label_ratio[i + 1] for i in range(len(label_ratio) - 1)):\n",
    "        return 1\n",
    "    elif all(label_ratio[i] >= label_ratio[i + 1] for i in range(len(label_ratio) - 1)):\n",
    "        return -1\n",
    "    else:\n",
    "        return 0\n",
    "    \n",
    "y = train['是否订阅']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4039c34",
   "metadata": {},
   "source": [
    "## 客户年龄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bf235658",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:49.036525Z",
     "start_time": "2024-10-29T17:16:49.004797Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[28.5 30.5 34.5 36.5 38.5 49.5 57.5]\n",
      "0\n"
     ]
    }
   ],
   "source": [
    "colname = '客户年龄'\n",
    "x = train[colname]\n",
    "bins = decision_tree_binning(x, y, max_leaf_node=8)\n",
    "print(bins)\n",
    "direction = check_monotonicity(x, y, bins)\n",
    "print(direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5f5a8434",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:49.054044Z",
     "start_time": "2024-10-29T17:16:49.039888Z"
    }
   },
   "outputs": [],
   "source": [
    "train['客户年龄'] = np.digitize(x, [28.5, 30.5, 34.5, 38.5, 49.5, 57.5], right=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "64b6666b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:49.084595Z",
     "start_time": "2024-10-29T17:16:49.054044Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>客户年龄</th>\n",
       "      <th>是否订阅</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>客户年龄</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4216</td>\n",
       "      <td>736</td>\n",
       "      <td>0.174573</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3167</td>\n",
       "      <td>388</td>\n",
       "      <td>0.122513</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7371</td>\n",
       "      <td>798</td>\n",
       "      <td>0.108262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>6421</td>\n",
       "      <td>601</td>\n",
       "      <td>0.093599</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11958</td>\n",
       "      <td>948</td>\n",
       "      <td>0.079277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5823</td>\n",
       "      <td>570</td>\n",
       "      <td>0.097888</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2232</td>\n",
       "      <td>599</td>\n",
       "      <td>0.268369</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       客户年龄  是否订阅      rate\n",
       "客户年龄                       \n",
       "0      4216   736  0.174573\n",
       "1      3167   388  0.122513\n",
       "2      7371   798  0.108262\n",
       "3      6421   601  0.093599\n",
       "4     11958   948  0.079277\n",
       "5      5823   570  0.097888\n",
       "6      2232   599  0.268369"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res = train.groupby(by='客户年龄').agg(func={'客户年龄': 'count', '是否订阅': 'sum'})\n",
    "res['rate'] = res['是否订阅'] / res['客户年龄']\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "0b16527a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:49.550304Z",
     "start_time": "2024-10-29T17:16:49.088597Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f03009f520>]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGdCAYAAAA8F1jjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABJbUlEQVR4nO3de3hTBbov/m8ubUrbNKX3lAZKuV8aKi0CFUdRQaQFZI862KPsEY+iW0R0/84+4J6z3RuHwYO/YY8UnI3sUQSHkWEcL9xmEKl0sIItt5bbgNIrTVp6S9qSW5OcP0pWiRRooO1aSb6f58nzkLWyVt9EbL6s9a53ydxutxtEREREEiQXuwAiIiKiG2FQISIiIsliUCEiIiLJYlAhIiIiyWJQISIiIsliUCEiIiLJYlAhIiIiyWJQISIiIslSil3AnXK5XKitrYVarYZMJhO7HCIiIuoBt9uN1tZWJCcnQy6/8XETyQUVm82GLVu24LnnnuvR62tra6HT6fq4KiIiIuoL1dXVSElJueF6n4NKdXU19uzZA41GA4vFgmeeecZrvcvlwvLly1FcXIzGxkasWrUKc+bMwebNm7Fs2TIolV0/UqvVoqysDADw+OOP49tvvwUATJgwocdBRa1WC3VFRUX5+naIiIhIBGazGTqdTvgevxGfg8rKlSvx3nvvQSaT4eDBg9i2bRvy8vKE9R999BHy8vKwZs0aXLhwAdnZ2Th37hwGDRqEhoYGIag0NjbiT3/6k7Dd/PnzsWPHDl/LEU73REVFMagQERH5mVu1bfjUTFtWVgaHwyHsNDs7G/n5+V6vGTt2LDIyMgAAI0aMQGpqKiorKzFjxgyvoyk7duzAY489JjwPDQ31pRQiIiIKAj4FleLiYiQlJQnPQ0JCUFVVhY6ODmFZVlaW8GebzQar1YqxY8det6+6ujrExsYKz9etW4fo6Gjo9XoUFhbesAabzQaz2ez1ICIiosDkU1Cpr6+HSqXyWqZQKNDQ0NDt69evX4+1a9ciLCzMa/m5c+cwevRor2Vr1qxBc3Mz8vPzsXDhQjQ2Nna7z9WrV0Oj0QgPNtISEREFLp+CSkJCAqxWq9cyp9OJuLi461578OBBpKWlYcaMGdet+/zzz5Gbm+u1bMqUKZDJZLjvvvuQl5eHoqKibmtYsWIFTCaT8KiurvblLRAREZEf8amZNisrC/v37xeeOxwO6HQ6r94TACgpKUF7ezvmz5/f7X6sVisiIiJu+HO0Wi0GDBjQ7TqVSnXdUR0iIiIKTD4dUdHr9ZDL5bDb7QCAoqIiLFmyBAUFBSgoKADQ2XB75swZzJ49G0BnmNm8ebOwj8rKSgwfPtxrvwaDARaLBUDnAJgTJ05g6tSpt/2miIiIKDD4fHnyW2+9hQ0bNiAmJgZWqxWLFy/G0qVLAXReBbRgwQLIZDKsWbMGQOdlyK+//rqw/YEDBzB37lyvfR44cACbN2/GrFmzoFAosHz58psecSEiIqLgIHO73W6xi7gTZrMZGo0GJpOJc1SIiIj8RE+/v3lTQiIiIpIsBhUiIiKSLAYVIiIikiwGFSIiIpIsn6/6ISIiouDwqz1nYXU4sXDqEAxPuPldjvsKgwoRERFdx+12409Ha9DUbse8jGTR6uCpHyIiIrrOhfo2NLXbERYiR/qgaNHqYFAhIiKi6xy52Hlz4KwhMQhVihcXGFSIiIjoOocvNgEAJg+NEbUOBhUiIiLy4na7caS884jKlGGxotbCoEJERERefrjchoY2O1RKOfQpGlFrYVAhIiIiL57TPplDBkKlVIhaC4MKEREReTl8tZF28lBxT/sADCpERER0jc7+lM4jKlPSxG2kBRhUiIiI6BoXG9pxudWGUKUcE3TRYpfDoEJERERdjlztT5k4OBphIeL2pwAMKkRERHQNKfWnAAwqREREdJXX/JQ0BhUiIiKSkIrGK6gz2xCqkOOuwdFilwOAQYWIiIiu8tzfJ0Mi/SkAgwoRERFd5elPmSLy/X2uxaBCREREcLvdwkRaqfSnAAwqREREBKCq6QqMZitCFDLcNXig2OUIGFSIiIhIOO2ToYvGgFBp9KcADCpERESErkFvUjrtAzCoEBERBb3O/hRpDXrzYFAhIiIKcjXNFtSaOvtTJg6JFrscLwwqREREQe7bq0dT9CnRCA9VilyNNwYVIiKiINfVnyKd+SkeDCpERERBTqr9KQCDChERUVCrbrqCSy0WKOUyZA6RzvwUDwYVIiKiIHakvPO0T3qKBhEqafWnAAwqREREQc1zI0KpzU/xECWouN1uVFVVYefOnWL8eCIiIrrqcLmnP0V6jbQA4PMxnurqauzZswcajQYWiwXPPPOM13qXy4Xly5ejuLgYjY2NWLVqFebMmQMAKCkpwezZsxEaGgoA+PDDD4Xttm/fDpfLBYvFgsmTJ2PcuHF38r6IiIjoFi61WFDdZIFCLkNWaoAElZUrV+K9996DTCbDwYMHsW3bNuTl5QnrP/roI+Tl5WHNmjW4cOECsrOzce7cOcTGxsJsNqO0tBRJSUle+ywsLITdbsfTTz8NAHjxxRexYcMGyOU8M0VERNRXPKd9xg/SIFKC/SmAj6d+ysrK4HA4IJPJAADZ2dnIz8/3es3YsWORkZEBABgxYgRSU1NRWVkJAGhtbUVs7PXnwN555x1MmzZNeB4fH4+9e/f69EaIiIjIN1Ken+LhU1ApLi72OhoSEhKCqqoqdHR0CMuysrKEP9tsNlitVowdOxZAZ1AZM2YM4uPj8eKLL8JqtQr71Wq1wnZarRbFxcXd1mCz2WA2m70eRERE5DtPf8oUCc5P8fApqNTX10OlUnktUygUaGho6Pb169evx9q1axEWFgYAyMzMRElJCcrLy9Ha2opVq1Z1u1+VSgWj0djtPlevXg2NRiM8dDqdL2+BiIiIABhMFlQ2XoFcBmSlSm9+iodPQSUhIUE4CuLhdDoRFxd33WsPHjyItLQ0zJgxQ1g2ZswYREdHIzIyEhs3bsSXX37Z7X7tdjsSExO7rWHFihUwmUzCo7q62pe3QEREROg67TN+kAbqsBCRq7kxn4JKVlaWVzBwOBzQ6XRQKr0bcEpKStDe3o758+ffcF8RERFCGJk0aZLXfo1Go9cppGupVCpERUV5PYiIiMg3R8qlPT/Fw6egotfrIZfLYbfbAQBFRUVYsmQJCgoKUFBQAKCz4fbMmTOYPXs2gM4ws3nzZgDAxYsXhX0VFBTgkUceAQAsW7YM+/btE9YZDAbk5OTc/rsiIiKimzp89YiKVOeneMjcbrfblw1qamqwY8cOxMTEwGq1YvHixVi6dCkA4O2338bEiROFq4IAoLGxEa+//jqeffZZ/PSnP0VqaioyMzOhVCrx85//XHjd1q1bAQAtLS24//77kZ6e3qN6zGYzNBoNTCYTj64QERH1QJ3Zism/+gpyGXD832ZCM6D/T/309Pvb56AiNQwqREREvvn8xCW88vEJjB8UhV0v3ytKDT39/uZENSIioiDjuRGhlC9L9mBQISIiCjKHr06knSzxRlqAQYWIiCio1LdacfFyO2Qy4G6J3t/nWgwqREREQcQzP2VMUhQ04dKdn+LBoEJERBRE/GV+igeDChERURAR5qdI+EaE12JQISIiChINbTZ8X98GmUz6g948GFSIiIiChKc/ZVSiGtHhoSJX0zMMKkREREHC3/pTAAYVIiKioOGZnzLFT/pTAAYVIiKioNDYZsP5ujYAwN1+MJHWg0GFiIgoCHxX3tWfEhPhH/0pAIMKERFRUBDu7+NHp30ABhUiIqKg4E/397kWgwoREVGAa26345yxFQBwt5/MT/FgUCEiIgpwntM+IxIiERepErka3zCoEBERBTh/nJ/iwaBCREQU4Pzt/j7XYlAhIiIKYC1X7DhnNAMAJvvR/BQPBhUiIqIA9l15E9xuYFh8BOLV/tWfAjCoEBERBbSu+Sn+dzQFYFAhIiIKaP46P8WDQYWIiChAmSwOnDF09qdM8bP5KR4MKkRERAGq+Gp/SlpcBBKiwsQu57YwqBAREQUofz/tAzCoEBERBSx/vRHhtRhUiIiIApDZ6sDpWhMA/5yf4sGgQkREFIBKKprgcgOpseFI0vhnfwrAoEJERBSQPGPz/XV+igeDChERUQA6IjTS+m9/CsCgQkREFHBarQ6UXfL//hSAQYWIiCjglFQ2w+UGBseEIzl6gNjl3BEGFSIiogDjmZ/iz5clezCoEBERBZgjVxtp/f20DyDBoGKz2bBp0yaxyyAiIvJLbbaOrv6UYDyiUl1djY0bN+Ljjz/GBx98cN16l8uFf/mXf8H06dOh1+uxc+dOYV1xcTHmzJmDiRMn4sknn0RbW5uw7vHHH0dKSgqGDRuGzz777PbeDRERUZA7WtkMp8sNXcwApAwMF7ucO+ZzUFm5ciWef/55LFiwAGlpadi2bZvX+o8++gh5eXkoKCjAJ598gkWLFqGxsRF2ux2ff/45Pv30Uxw7dgxqtRpvvvmmsN38+fNRU1ODmpoa7N69+87fGRERURAS7u8TAKd9AB+DSllZGRwOB2QyGQAgOzsb+fn5Xq8ZO3YsMjIyAAAjRoxAamoqKisrYTQa8corr0CpVAIA5s2bh7NnzwrbhYaG9qgGm80Gs9ns9SAiIqJOR4RG2iAMKsXFxUhKShKeh4SEoKqqCh0dHcKyrKws4c82mw1WqxVjx47F4MGDER8fL6w7ffo0Zs6cKTxft24doqOjodfrUVhYeMMaVq9eDY1GIzx0Op0vb4GIiChgXbF3oLTGMz/F//tTAB+DSn19PVQqldcyhUKBhoaGbl+/fv16rF27FmFh3vcYaGpqwunTp/HCCy8Iy9asWYPm5mbk5+dj4cKFaGxs7HafK1asgMlkEh7V1dW+vAUiIqKAdbSyGR0uNwZFD4Auxv/7UwAfg0pCQgKsVqvXMqfTibi4uOtee/DgQaSlpWHGjBleyx0OB9avX4/169cLp4EAYMqUKZDJZLjvvvuQl5eHoqKibmtQqVSIioryehAREdE1/SkBcLWPh09BJSsry+sIhsPhgE6n8wocAFBSUoL29nbMnz/fa7nL5cK7776L1157DWq1+oY/R6vVYsAA/56kR0RE1N+OBMiNCK/lU1DR6/WQy+Ww2+0AgKKiIixZsgQFBQUoKCgA0Nlwe+bMGcyePRtAZ5jZvHkzgM7TO0899RQiIyMBAFu2bIHNZoPBYIDFYgEAuN1unDhxAlOnTu2VN0hERBQMLHYnTta0AACmBMgVPwAgc7vdbl82qKmpwY4dOxATEwOr1YrFixdj6dKlAIC3334bEydOFK4KAoDGxka8/vrriIqKwvLlyxEb2/nhuVwuNDU1wWg04ve//z02b96MWbNmQaFQICcnByNGjOhRPWazGRqNBiaTiaeBiIgoaH3zfQP+x38fQbImDN8sf8Dru1iKevr97XNQkRoGFSIiIuDX+/6O/APfY/5dg/CfP8sQu5xb6un3t+RG6BMREZHvuvpTAqeRFmBQISIi8ntWhxMnqlsABM5EWg8GFSIiIj93rKoZdqcLSVFhGBIbGPNTPBhUiIiI/Nzhq6d9JqfFSL6J1lcMKkRERH4u0O7vcy0GFSIiIj9mdThxXOhPCaxGWoBBhYiIyK+dqG6BvcOFBLUKQ+MixC6n1zGoEBER+bGu+/vEBlx/CsCgQkRE5NcCdX6KB4MKERGRn7J1OHGsqhlA4M1P8WBQISIi8lMnq02wdbgQF6nCsPjA608BGFSIiIj8Vld/SuDNT/FgUCEiIvJTR8oDd36KB4MKERGRH7J3uHC0srM/ZUoAzk/xYFAhIiLyQ6U1LbA6XIiNCMXwhEixy+kzDCpERER+KBj6UwAGFSIiIr90pNwzPyVw+1MABhUiIiK/43C6UFIR2PNTPBhUiIiI/ExpjQkWhxMxEaEYEcD9KQCDChERkd/x9KfcnRoDuTxw+1MABhUiIiK/09WfEriXJXswqBAREfmRzv6UzqAyOcAbaQEGFSIiIr9y6pIJV+xORIeHYFSiWuxy+hyDChERkR85fLHzaEow9KcADCpERER+JRju73MtBhUiIiI/0eF0objc058S+I20AIMKERGR3zhVa0a73QnNgBCMSYoSu5x+waBCRETkJ45cnZ8yKUj6UwAGFSIiIr/hGfQWDPNTPBhUiIiI/EDHNff3CZZGWoBBhYiIyC+cMZjRauuAOkyJMdrg6E8BGFSIiIj8wpFr5qcogqQ/BWBQISIi8gtd/SnBc9oHYFAhIiKSPKfLje8qgmt+iofS1w2qq6uxZ88eaDQaWCwWPPPMM17rXS4Xli9fjuLiYjQ2NmLVqlWYM2fOLbfdvn07XC4XLBYLJk+ejHHjxt3hWyMiIgoMZw1mtFo7oFYpMTaI+lOA2ziisnLlSjz//PNYsGAB0tLSsG3bNq/1H330EfLy8lBQUIBPPvkEixYtQmNj4023LSwshN1ux5NPPolFixZh/fr1cLlcvfD2iIiI/J/ntE9W6kAoFcF1MsSnd1tWVgaHwwGZrLOJJzs7G/n5+V6vGTt2LDIyMgAAI0aMQGpqKiorK2+67TvvvINp06YJ+4iPj8fevXtv+00REREFEs+NCIOtPwXwMagUFxcjKSlJeB4SEoKqqip0dHQIy7KysoQ/22w2WK1WjB079qbbFhcXQ6vVCuu0Wi2Ki4u7rcFms8FsNns9iIiIApXL5Uax0J/CoHJT9fX1UKlUXssUCgUaGhq6ff369euxdu1ahIWF3XTbH69TqVQwGo3d7nP16tXQaDTCQ6fT+fIWiIiI/MpZoxkmiwMRoQqMTw6u/hTAx6CSkJAAq9XqtczpdCIuLu661x48eBBpaWmYMWPGLbf98Tq73Y7ExMRua1ixYgVMJpPwqK6u9uUtEBER+RXP/JSs1Jig608BfAwqWVlZXsHA4XBAp9NBqfS+eKikpATt7e2YP39+j7adNGmS1zqj0eh1CulaKpUKUVFRXg8iIqJAFazzUzx8Cip6vR5yuRx2ux0AUFRUhCVLlqCgoAAFBQUAOhtuz5w5g9mzZwPoDCSbN2++4bYAsGzZMuzbt0/4OQaDATk5OXf+7oiIiPyYK4jnp3jI3G6325cNampqsGPHDsTExMBqtWLx4sVYunQpAODtt9/GxIkThSt7AKCxsRGvv/46Xn755W639di6dSsAoKWlBffffz/S09N7VI/ZbIZGo4HJZOLRFSIiCihnDWY88s7fEB6qwMk3ZiIkgE799PT72+egIjUMKkREFKg2f1OOf995BveOiMPWZyeLXU6v6un3d+BEMyIiogATzPNTPBhUiIiIJOja/pQpQdqfAjCoEBERSdKF+jY0tdsxIESB9EHRYpcjGgYVIiIiCTpS3nV/n1Bl8H5dB+87JyIikjDP/JTJQ4P3tA/AoEJERCQ5brdbmEgbzI20AIMKERGR5Hxf34bGdjvCQuTQp0SLXY6oGFSIiIgk5nB559GUzCHB3Z8CMKgQERFJTld/SnCf9gEYVIiIiCSF/SneGFSIiIgk5IfL7Whos0GllGOCTiN2OaJjUCEiIpIQz/yUiYMHQqVUiFyN+BhUiIiIJMRzf5/JQTw2/1oMKkRERBLR2Z/SeUSF/SmdGFSIiIgkoryhHfWtNoQq5cjQRYtdjiQwqBAREUnEkavzU+7SRSMshP0pAIMKERGRZAjzU3jaR8CgQkREJAHe81PYSOvBoEJERCQBlY1XYDRbEaqQY+LggWKXIxkMKkRERBLgmZ+Swf4ULwwqREREEsD5Kd1jUCEiIhIZ56fcGIMKERGRyKqbLKg1WRGikLE/5UcYVIiIiER2+Gp/yoSUaAwIZX/KtRhUiIiIRNY1P4X9KT/GoEJERCSyrvkp7E/5MQYVIiIiEVU3XcGlFguUchkyh7A/5ccYVIiIiETkub+PPkWD8FClyNVID4MKERGRiHh/n5tjUCEiIhLRYc5PuSkGFSIiIpHUNF9BTbMFCvan3BCDChERkUg8V/ukD9IgUsX+lO4wqBAREYnEcyNCzk+5MQYVIiIikRzm/JRbklxQsdls2LRpk9hlEBER9anaFguqmq5ALgOy2J9yQz4HlerqamzcuBEff/wxPvjgg25fY7PZMG/ePHz99dfCss2bNyM6OhpxcXHCIz09XVj/+OOPIyUlBcOGDcNnn33m8xshIiLyJ57TPumDNFCHhYhcjXT53LmzcuVKvPfee5DJZDh48CC2bduGvLw8YX1tbS0+/PBD2Gw2r+0GDRqEhoYGKJWdP7KxsRF/+tOfhPXz58/Hjh07bvd9EBER+RVPIy3np9ycT0dUysrK4HA4IJPJAADZ2dnIz8/3eo1arcaKFSuQlJTktXzGjBlCSAGAHTt24LHHHhOeh4aG9qgGm80Gs9ns9egLbrcbP1xu65N9ExERdc1PYSPtzfgUVIqLi70CSEhICKqqqtDR0SEsU6vVPdpXXV0dYmO7UuS6desQHR0NvV6PwsLCG263evVqaDQa4aHT6Xx5Cz1idTjx6vYTyF13CGcNfROEiIgoeBlNVlQ0Xu1PSWVQuRmfgkp9fT1UKpXXMoVCgYaGBp9+6Llz5zB69GivZWvWrEFzczPy8/OxcOFCNDY2drvtihUrYDKZhEd1dbVPP7snlHIZGtvtsDiceG5LCZra7b3+M4iIKHh5+lPGJWsQxf6Um/IpqCQkJMBqtXotczqdiIuL8+mHfv7558jNzfVaNmXKFMhkMtx3333Iy8tDUVFRt9uqVCpERUV5PXqbUiFH/pN3YUhsOGqaLXjp98fgcLp6/ecQEVFw8lyWPHkoj6bcik9BJSsry+sIhsPhgE6n8+o96Qmr1YqIiIgbrtdqtRgwYIBP++xt0eGh2LQwCxGhCnx7sRGrdp8VtR4iIgocR3h/nx7zKajo9XrI5XLY7Z2nQoqKirBkyRIUFBSgoKCgR/uorKzE8OHDvZYZDAZYLBYAnU2sJ06cwNSpU30prU+MTFTjP3+WAQDYXFSB7cVV4hZERER+r95sxcWGdshkwCQeUbklny9Pfuutt7BhwwbExMTAarVi8eLFWLp0KQBg+vTpAIDCwkKUlJRAo9Fg9OjRXg24Bw4cwNy5c732eeDAAWzevBmzZs2CQqHA8uXLb3rEpT/NHJeE12aMxNovz+MXn53C8IRIZA7hXywiIro9h8s7T/uM1UZBM4D9Kbcic7vdbrGLuBNmsxkajQYmk6lP+lUAwOVy46Vtx7D3lBFxkSrsfPkeaDXinpoiIiL/9K+fluH3R6qw6J6h+Lc5Y8UuRzQ9/f6W3Ah9KZLLZfj/H5+A0UlqNLTZsHjrUVgdTrHLIiIiP8T5Kb5hUOmhCJUSmxZmITo8BKU1Jqz4cxn8/GAUERH1s8utNvxwubM/5W72p/QIg4oPdDHheDdvIhRyGT49fgm/O1QudklERORHPPNTRidFITq8ZxPZgx2Dio+yh8fh/+SMAQD8as9ZFJ6/LHJFRETkL45wforPGFRuwz9mp+KJrBS43MCSbcdQ0dAudklEROQHDnN+is8YVG6DTCbDm4+Ox12Do2G2duB/bilBq9UhdllERCRhDW02XKjvvNkt+1N6jkHlNqmUCmx8KhOJUSp8X9+GV7efhMvF5loiIured1fnp4xOUiMmgv0pPcWgcgcSosKw8ekshCrl2H+2Dr/Zf17skoiISKI8Y/PZn+IbBpU7lKGLxur56QCAdQe+x54yg8gVERGRFHluRMj+FN8wqPSCn2am4H9OGwoA+Oc/nsRZg1nkioiISEqa2u34e10rAPan+IpBpZcsf2Q07h0RB4vDiee2lKCp3S52SUREJBHfXZ2fMjIxErGRKpGr8S8MKr1EqZAj/8m7MCQ2HDXNFrz0+2NwOF1il0VERBJwWJifwtM+vmJQ6UXR4aHYtDALEaEKfHuxEat2nxW7JCIikgDOT7l9DCq9bGSiGv/5swwAwOaiCmwvrhK3ICIiElXLla7+lMm8EaHPGFT6wMxxSXj1oZEAgF98dgpHK5tEroiIiMRypLwJbjcwPCEScexP8RmDSh95+YHhmDUuCQ6nG4u3HoPBZBG7JCIiEsER4bJkHk25HQwqfUQul+HXT0zAqEQ1GtpsWLz1KKwOp9hlERFRPzssDHpjf8rtYFDpQxEqJTYtzEJ0eAhKa0xY8ecyuN0cs09EFCxMVxw4a+ycrcX+lNvDoNLHBseGY0PeRCjkMnx6/BJ+d6hc7JKIiKiffFfR2Z+SFh+BBHWY2OX4JQaVfnDP8Dj8ImcMAOBXe86i8PxlkSsiIqL+cISXJd8xBpV+8vPsVDyemQKXG1iy7RgqGtrFLomIiPrY4XLeiPBOMaj0E5lMhl/OH4+7BkfDbO3Ac1tK0GbrELssIiLqIyaLA2dqO/tTeETl9jGo9COVUoGNT2UiMUqFC/VteHX7CbhcbK4lIgpEJRVNcLmBoXERSIxif8rtYlDpZwlRYdj4dBZClXJ8eaYOv/nqgtglERFRHzhSzvkpvYFBRQQZumisnp8OAFj31QXsLTOIXBEREfU2zk/pHQwqIvlpZgqenTYUAPDPO07irMEsckVERNRbWq0OnLpkAsD5KXeKQUVEKx4ZjWnD43DF7sRzW0rQ1G4XuyQiIuoFJRXNcLmBIbHh0GoGiF2OX2NQEZFSIcf6vLswOCYcNc0WvPT7Y3A4XWKXRUREd8hzWfIUnva5YwwqIosOD8V//2MWIkIV+PZiI1btPit2SUREdIcOX70RIU/73DkGFQkYmajG2p9lAAA2F1Xgj8XV4hZERES3rc3WcU1/Co+o3CkGFYl4eFwSXn1oJADgF5+dwtHKZpErIiKi21FS0QSnyw1dzAAMimZ/yp1iUJGQlx8YjlnjkmB3uvDCR0dhNFnFLomIiHzkOe3D/pTewaAiIXK5DL9+YgJGJapxudWGxVtLYHU4xS6LiIh8cMRzfx+e9ukVogQVt9uNqqoq7Ny5U4wfL2kRKiU2LcxCdHgITtaY8Pqfy+B2c8w+EZE/aLd1oLTman8Kb0TYK3wOKtXV1di4cSM+/vhjfPDBB92+xmazYd68efj666+9lpeUlCAhIQE6nQ7Z2dkIDw8X1m3fvh1/+MMf8P777+P06dO+lhVQBseGY0PeRCjkMvz5+CX87lC52CUREVEPHK1shtPlxqDoAdDFhN96A7oln4PKypUr8fzzz2PBggVIS0vDtm3bvNbX1tZi7dq1sNls121rNptRWlqKmpoa1NTU4MEHHwQAFBYWwm6348knn8SiRYuwfv16uFzBPU/knuFx+EXOGADAr/acxd8uXBa5IiIiuhXP2HzeLbn3+BRUysrK4HA4IJPJAADZ2dnIz8/3eo1arcaKFSuQlJR03fatra2Ijb3+P94777yDadOmCc/j4+Oxd+9eX0oLSD/PTsXjmSlwuYEl246joqFd7JKIiOgmPDci5PyU3uNTUCkuLvYKICEhIaiqqkJHR4ewTK1W33D71tZWjBkzBvHx8XjxxRdhtVqF/Wq1WuF1Wq0WxcXF3e7DZrPBbDZ7PQKVTCbDL+ePx12Do2GyOPDclhK02TpuvSEREfW7K/YOnKxuAQBM5RGVXuNTUKmvr4dKpfJaplAo0NDQ0KPtMzMzUVJSgvLycrS2tmLVqlXd7lelUsFoNHa7j9WrV0Oj0QgPnU7ny1vwOyqlAhufykRilAoX6tvw6vYTcLnYXEtEJDXHKlvQ4XIjWROGlIGcn9JbfAoqCQkJwlEQD6fTibi4uB5tP2bMGERHRyMyMhIbN27El19+2e1+7XY7EhMTu93HihUrYDKZhEd1deBPcU2ICsPGp7MQqpTjyzN1+M1XF8QuiYiIfuTa/hRPiwTdOZ+CSlZWllcwcDgc0Ol0UCqVPv/giIgIIYxMmjTJa79GoxFZWVndbqdSqRAVFeX1CAYZumisnp8OAFj31QXsLTOIXBEREV2ra34K+1N6k09BRa/XQy6Xw263AwCKioqwZMkSFBQUoKCg4JbbX7x4UfhzQUEBHnnkEQDAsmXLsG/fPmGdwWBATk6OL6UFhZ9mpuDZaUMBAP+84yTOGgK3P4eIyJ9Y7E6cuNqfwit+epfPh0LeeustbNiwATExMbBarVi8eDGWLl0KAJg+fTqAzsuNS0pKoNFoMHr0aCQlJeHKlSt46aWXkJqaiszMTCiVSrzwwgsAgHvvvRcVFRXYunUrWlpasGTJEsjlHJrbnRWPjMbfja049H0DnttSgi+WTENMRKjYZRERBbXjVc1wON1IigrDYM5P6VUyt5+PPTWbzdBoNDCZTEFzGqjlih1z13+DqqYrmJoWiy3P3o0QBYMdEZFY1u77O9Yd+B6PZiTjNwvuErscv9DT729+u/mh6PBQ/Pc/ZiEiVIFvLzZi1e6zYpdERBTUDgvzU3jap7cxqPipkYlqrP1ZBgBgc1EF/lgc+Fc/ERFJkdXhxImqFgDsT+kLDCp+7OFxSXj1oZEAgF98dgpHK5tFroiIKPgcr2qB3elCglqF1Fj2p/Q2BhU/9/IDw/HwuETYnS688NFRGE3WW29ERES9hvNT+haDip+Ty2X49RMZGJWoxuVWGxZvLYHV4RS7LCKioMH5KX2LQSUARKqU2LQwC9HhIThZY8Lrfy6Dn1/MRUTkF6wOJ46xP6VPMagEiMGx4diQNxEKuQx/Pn4JvztULnZJREQB72R1C+wdLsRFqpAWFyF2OQGJQSWA3DM8Dv86ewwA4Fd7zuJvFy6LXBERUWA7fLHzsuQpaTHsT+kjDCoB5pl7UvFYZgpcbmDJtuOoaGgXuyQiooDV1Z/C0z59hUElwMhkMvzy0fHI0EXDZHHguS0laLN1iF0WEVHAsXU4hbEQU9lI22cYVAJQWIgCG5/ORIJahQv1bXh1+wm4XGyuJSLqTaU1Jtg6XIiLDMWw+EixywlYDCoBKjEqDBufzkSoQo4vz9ThN19dELskIqKAcviHq6d9hnJ+Sl9iUAlgdw0eiF/9QzoAYN1XF7C3zCByRUREgeOIcH8fnvbpSwwqAe6xzBQsumcoAOCfd5zEWYNZ5IqIiPyfvcOFkkrPFT9spO1LDCpB4PXZo3HP8FhcsTvx3JYSNLXbxS6JiMivlV1qgdXhQkxEKEYksD+lLzGoBAGlQo71T07E4Jhw1DRb8NLvj8HhdIldFhGR3/LMT5k8lPNT+hqDSpAYGBGKTQuzEB6qwLcXG7Fq91mxSyIi8lueGxFOHsr+lL7GoBJERiWpsfaJDADA5qIK/LG4WtyCiIj8kMPpEuanTBnG/pS+xqASZGaNT8Kyh0YAAH7x2SnhfzYiIuqZsksmXLE7ER0egpEJarHLCXgMKkFo6QMj8PC4RNidLrzw0VEYTVaxSyIi8hvXnvaRy9mf0tcYVIKQXC7Dr5/IwKhENS632rB4awmsDqfYZRER+YUjQiMtT/v0BwaVIBWpUmLTwixEh4fgZI0Jr39aBrebY/aJiG6mw+lCSQXnp/QnBpUgNjg2HBvyJkIhl+HPxy7h/W8qxC6JiEjSTtWa0W53QjMgBKOT2J/SHxhUgtw9w+Pwr7PHAABW7T6DQxcaRK6IiEi6PP0pd7M/pd8wqBCeuScVj2WmwOUGXtp2DJWN7WKXREQkSUc4P6XfMagQZDIZfvnoeGToomGyOPDclhK02TrELouISFI6nC4UV1ydn8L+lH7DoEIAgLAQBTY+nYkEtQrn69rw2vYTcLnYXEtE5HHGYEabrQNRYUqM0UaJXU7QYFAhQWJUGDY+nYlQhRz7ztThna8uiF0SEZFkXNufomB/Sr9hUCEvdw0eiF/9QzoA4J2vLuAvpwwiV0REJA2e+Sk87dO/GFToOo9lpmDRPUMBAK/98STOGc0iV0REJC6ny43vyjnoTQwMKtSt12ePxj3DY3HF7sRzW0rQ3G4XuyQiItGcNZjRauuAWqXE2GT2p/QnBhXqllIhx/onJ2JwTDiqmyx4adsxdDhdYpdFRCQKT3/KJPan9DsGFbqhgRGh2LQwC+GhChT90IhVe86KXRIRkSgOC/0pnJ/S3xhU6KZGJamx9okMAMAH31TgjyXV4hZERNTPOvtTPIPe2J/S3yQXVGw2GzZt2iR2GXSNWeOTsOyhEQCAX3x6CseqmkWuiIio/5w1mGG2diBSpcQ49qf0O5+DSnV1NTZu3IiPP/4YH3zwQbevsdlsmDdvHr7++muv5cXFxZgzZw4mTpyIJ598Em1tbcK6xx9/HCkpKRg2bBg+++wzX8uiPrb0gRF4eFwi7E4XXth6FHVmq9glERH1iyNXr/bJSh0IpUJy/74PeD5/4itXrsTzzz+PBQsWIC0tDdu2bfNaX1tbi7Vr18Jms3ktt9vt+Pzzz/Hpp5/i2LFjUKvVePPNN4X18+fPR01NDWpqarB79+7bfDvUV+RyGX79RAZGJapR32rD81uPwupwil0WEVGf8zTScn6KOHwKKmVlZXA4HJDJOjues7OzkZ+f7/UatVqNFStWICkpyWu50WjEK6+8AqVSCQCYN28ezp7tas4MDQ3tUQ02mw1ms9nrQf0jUqXEewszoRkQgpPVLfjXT0/B7eaYfSIKXC6v+SlspBWDT0GluLjYK4CEhISgqqoKHR1dN7BTq9Xdbjt48GDEx8cLz0+fPo2ZM2cKz9etW4fo6Gjo9XoUFhbesIbVq1dDo9EID51O58tboDs0JDYCG/ImQi4DPjlWg/e/qRC7JCKiPnPO2AqTxYGIUAXGD9KIXU5Q8imo1NfXQ6VSeS1TKBRoaGjw6Yc2NTXh9OnTeOGFF4Rla9asQXNzM/Lz87Fw4UI0NjZ2u+2KFStgMpmER3U1r0Lpb9NGxOFfc8YCAFbtPoNDF3z7709E5C+OXL3aJzM1BiHsTxGFT596QkICrFbvJkqn04m4uLge78PhcGD9+vVYv369cBoIAKZMmQKZTIb77rsPeXl5KCoq6nZ7lUqFqKgorwf1v0X3pOKnE1PgcgMvbTuGysZ2sUsiIup1Xf0pPO0jFp+CSlZWltcRDIfDAZ1O5xU4bsblcuHdd9/Fa6+9dsNTRACg1WoxYMAAX0qjfiaTybBq/nhM0EXDZHHguS0luHi57dYbEhH5CRfv7yMJPgUVvV4PuVwOu73zvi9FRUVYsmQJCgoKUFBQcMvt16xZg6eeegqRkZEAgC1btsBms8FgMMBisQAA3G43Tpw4galTp/r6XqifhYUo8N7TmUhQq3C+rg0P/PogZr/zN2wo+B4VDTzCQkT+7Xx9K5qvODAgRAF9CvtTxNKzQyHXeOutt7BhwwbExMTAarVi8eLFWLp0KQBg+vTpAIDCwkKUlJRAo9Fg9OjRSEpKwocffoh33nkHH330EYDOoytNTU1YuHAhDhw4gM2bN2PWrFlQKBRYvnw5IiIievFtUl9JjArDlmfvxlt7z+HQhQacMZhxxmDG23/9O8YPikJOejJy9VroYsLFLpWIyCdHLnbNT2F/inhkbj+/vtRsNkOj0cBkMrFfRWTN7XbsO2PErlIDin5ohNPV9VdrQooGOXotcvTJGBTN03pEJH0vfnQUe08Z8b8eHoWXpg8Xu5yA09PvbwYV6hONbTb89XQddpfV4tsfGnFNZsFdg6ORk67F7HQtkhlaiEiC3G43Mn+5H03tdvzphanISmUzbW9jUCHJaGizYe8pI3aX1uJIeROu/RuXNWQgcvSdoSUxKky8IomIrnG+rhUz/7MQYSFylL7xMEKVPPXT23r6/e1zjwqRr+IiVXh6yhA8PWUI6lut+MspI3adNKC4sgkllc0oqWzGyl1nMGlIDHInaDFrfBIS1AwtRCSeI1cvS84cMpAhRWQMKtSvEtRhWDg1FQunpsJosmLvKQN2lRpwtLIZ31U04buKJrzxxWlMHhqDHH0yHhmfhLhI1a13TETUiw5fbaSdwsuSRcdTPyQJtS0W7CkzYHeZAcerWoTlchkwdVgsctKTMWt8EmIienZPKCKi2+V2uzFp1X40tNnxx8VTcTfv8dMn2KNCfqum+UpnaCk14GSNSViukMuQPSwWuXotHh6XhOhwhhYi6n3f17fiobWFUCnlKP33mVApFWKXFJAYVCggVDddwa5SA3aX1eLUpa47ZSvlMtwzPA65ei1mjk2CJjxExCqJKJB8dLgSv/jsFKamxeIPz08Ru5yAxWZaCgi6mHC8eP8wvHj/MFQ0tGN3WWdPy1mDGQfPX8bB85fxuqIM946IR65ei4fGJiIqjKGFiG5f1/192J8iBQwq5DdS4yLw0vTheGn6cPxwuQ17Sjt7Ws4ZW3HgXD0OnKtHqEKOn4zsCi2RKv4VJ6Kec7vdOOK5vw9vRCgJPPVDfu9CXatwpOX7+q4bI4Yq5Zg+Kh45+mQ8ODoBEQwtRHQLP1xuw4O/PohQpRylb8xEWAj7U/oKT/1Q0BiRqMayRDVeeXAEzte1YXdpLXaVGnCxoR1/PV2Hv56uQ1iIHA+MTkBOejKmj45HeCj/6hPR9Tz397lLF82QIhH8bU0BQyaTYVSSGqOSRuHVGSNxztiKXaW12F1qQEXjFewpM2JPmREDQhR4YEwC5ui1uH9UAn8ZEZGA/SnSw6BCAUkmk2GMNgpjtFH4/2aOwulas3D1UHWTBbtLOy9/jghV4MExicjVa/GTkfEMLURBrLM/pTOosD9FOhhUKODJZDKMH6TB+EEa/O9Zo1B2yYTdpZ09LZdaLPjiZC2+OFmLSJUSM8YmIiddi3tHxnF2AlGQqWi8gjqzDaEKOSYOHih2OXQVgwoFFZlMBn1KNPQp0Vj+yGicqG7pPLpSZoDBZMWnxy/h0+OXoA5TYubYJOTqtbhneBzv9UEUBDz398lgf4qkMKhQ0JLJZLhr8EDcNXggXp89Bserm7Gr1IA9ZQbUmW345FgNPjlWg6gwJR4el4TcCcnIHhaLEAVDC1Eg6upP4WkfKWFQIQIgl8uQOSQGmUNi8H9yxqKkshm7S2ux55QRl1tt2HG0BjuO1iA6PASzxiUhV5+MKWkxUDK0EAUE7/kpbKSVEs5RIboJp8uN4oom7CqtxV9OGdHQZhfWxUSEYtb4JOSmazE5LRYKuUzESonoTlQ2tuO+t79GiEKG0jcexoBQnvrpa5yjQtQLFHIZpqTFYkpaLP59zjh8V96EXWUG/OWUEU3tdmw7UoVtR6oQFxmKR8ZrkaPXYlJqDEMLkZ/xzE+ZkBLNkCIxDCpEPaRUyJE9PA7Zw+Owcu44fHuxEbtLDfjL6c4jLVsPV2Lr4UokqFWYnd4ZWjIHD4ScoYVI8jg/Rbp46ofoDjmcLnzzfQN2lxrw19NGmK0dwrqkqDAhtNyli2ZoIZIgt9uNaf+3AJdaLNj67N24d0S82CUFhZ5+fzOoEPUie4cLh76/jF2lBnx5ug6ttq7QkqzpCi0ZumjIZAwtRFJQ3XQF964pgFIuQ+m/z+QtNvoJe1SIRBCqlOOB0Yl4YHQibB1O/O18A3aV1uLLM3WoNVnx34fK8d+HyqGLGYA5+mTMmZCM0UlqhhYiEXlO++hTNAwpEsT/IkR9RKVU4KGxiXhobCKsDicOnr+M3aUG7D9bh+omC979+ge8+/UPGJEQibkTOkNLalyE2GUTBZ3DVxtp2Z8iTQwqRP0gLESBh8cl4eFxSbhi78CBc/X44kQtvv77ZVyob8OvvzyPX395HhNSNJgzIRm5+mQkacLELpsoKHTd34dBRYrYo0IkIpPFgb+eNmLnyVp8830DXFf/b5TJgLtTYzBnQjJmp2sRExEqbqFEAaqm+Qqm/d8CKOQylL4xExEq/vu9v7BHhcgPaAaE4IksHZ7I0qGhzYY9ZQZ8caIWJZXNOFLehCPlTfj3L05j2og4zJ2QjJnjkhDJX6REvcYzPyV9kIYhRaL4X4VIIuIiVVg4NRULp6biUosFu67e1fl0rRlf//0yvv77ZaiUZXhgdALmTkjG9NEJvHEa0R3i/BTpY1AhkqBB0QOw+L5hWHzfMPxwuQ1fnKjFzpO1uNjQjr2njNh7yohIlRIzxyZiTkYypg2P480SiW5D1/19eCNCqWKPCpGfcLvdOF1rxs6TnaGl1mQV1sVEhOKR8UmYMyEZd6fGcLAcUQ/UtliQ/dYBKOQynPi3GVCHhYhdUlBhjwpRgJHJZBg/SIPxgzT437NG41hVM744WYvdpQY0ttvx+yNV+P2RKiRFhSFXr8XcjGSkD9JwRgvRDXiu9hmfHMWQImEMKkR+SC6XISs1BlmpMfi33LEo+qERO0/W4i+njTCauwbLpcaGY86EZMydkIwRiWqxyyaSlMM/cH6KP+CpH6IA4hks98XJWnx1tg5Wh0tYNzpJjbkZyZijT4YuJlzEKomk4f63C1DReAXv/zwLD4xOFLucoMN7/RAFuXZbB/afrcMXJ2pReOEyHM6u/9XvGhyNuROSkaPXIkHNwXIUfIwmK6as/gpyGXDijZmI4qmfftdnPSrV1dXYs2cPNBoNLBYLnnnmmeteY7PZ8MQTT+DVV1/F/fff36Ntt2/fDpfLBYvFgsmTJ2PcuHG+lkZE14hQKTEvYxDmZQxCyxU7/nLKiC9O1uLbi404XtWC41UteHPXGUxJi8XcCcl4ZLwWmnD+sqbg4OlPGZesYUiROJ+DysqVK/Hee+9BJpPh4MGD2LZtG/Ly8oT1tbW1+PDDD2Gz2Xq8bWFhIex2O55++mkAwIsvvogNGzZALufllkS9ITo8FAvuHowFdw9GvdmKXaUG7CytxfGqFhT90IiiHxrxfz4/hZ+MiMfcjGQ8NCaRw68ooHXNT+FlyVLnUxIoKyuDw+EQriLIzs5Gfn6+12vUajVWrFiBpKSkHm/7zjvvYNq0acJr4+PjsXfvXt/fDRHdUkJUGBZNG4pP/+ke/O1fpuN/PTwKo5PUcDjd+OpcPV75+ASyfrkfS7Ydw77TRtg6nGKXTNTrjvBGhH7Dp38yFRcXewWQkJAQVFVVoaOjA0pl567U6u6vLLjZtsXFxdBqtcI6rVaL4uJi5OTkXLcfm83mdbTGbDb78haI6Bq6mHC8NH04Xpo+HOfrWrHz6jTcysYr2FVqwK5SA9RhSswal4S5GcmYmhYLJQfLkZ+rM1txsaEdMhmQlcojKlLnU1Cpr6+HSqXyWqZQKNDQ0HDdERRftv3xOpVKBaPR2O1+Vq9ejf/4j//wpWwi6oGRiWr888xReG3GSJTWmLDzZC12lRpgNFux42gNdhytQVxkKGanazF3QjImDh7IwXLklzynfcYlR0EzgP0pUufTP40SEhJgtVq9ljmdTsTFxd3Rtj9eZ7fbkZjY/aViK1asgMlkEh7V1dW+vAUiugWZTIYJumj8IncsipY/gI+fn4K8yYMxMDwEDW12bPm2Eo/917e4d00BVu89i1OXTPDziwcpyAhj84fytI8/8OmISlZWFvbv3y88dzgc0Ol0wmmf29120qRJqK6uxsiRIwEARqMRWVlZ3e5HpVJdd2SGiPqGXC7DlLRYTEmLxX/MHYdD3zdg54la/PW0EZdaLNh48CI2HryItPgIzL06WC4tPlLssoluqLKxHYXnLwNgf4q/8Cmo6PV6yOVy2O12hIaGoqioCEuWLEFBQQEAYPr06T5vCwDLli3Dvn37hKBiMBi67U8hIvGEKOSYPioB00clwOpw4sC5euw8WYuvztXj4uV2/Gb/Bfxm/wWMS47C3AnJmDMhGcnRA8QumwhutxtHypvwu0Pl2H+2Dm43EKlS4m72p/gFnwe+1dTUYMeOHYiJiYHVasXixYuxdOlSAMC6desAAIWFhfinf/onPPjgg15XAHW3rcfWrVsBAC0tLbj//vuRnp7eo3o48I1IXK1WB/adrsPO0lr87UIDnK6uXymTUgd2zmhJ1yIukkdCqX/ZO1zYebIW739TjtO1XRde3DcyHq88NAITBw8UsTriZFoi6ndN7XbsKTPgi5O1KK5ogue3i0IuQ/awzsFyD49P4oAt6lONbTZsO1KFLYcrcbm18yrRsBA5/mFiCp7JTuV9rySCQYWIRGUwWbC7tDO0lNaYhOWhCjnuH9U5WO7B0YkYEKoQsUoKJOfrWvH+oXJ8evwSbB2d97lKUKvwj9mpyLt7MAZGhIpcIV2LQYWIJKO8oV2Y0fJ9fZuwPDxUgRljEzF3QjLuHRGPUCVntJBvXC43Dl64jPcPleNvFxqE5emDNHh22lDMTtfy75VEMagQkeS43W6cM7bii5O12HmyFjXNFmFddHgIHhmfhDn6ZExOi4WCM1roJix2Jz45VoMPvinHD5fbAQByGTBzbBKevXcosoYMFCahkzQxqBCRpLndbhyvbsEXJzoHyzW0dU2cTlCrkKPvHCyXoYvmFw4JjCYrPvy2An/4rgotVxwAOq/g+dkkHX6enQpdTLjIFVJPMagQkd9wutw4fLERO0/WYu8pI0wWh7AuZeAA5Oi1mKNPxrjkKIaWIFVa04LfHSrH7lIDOq5eWaaLGYCfZw/FE1kpULNB2+8wqBCRX7J3uFB4/jK+OFmLL8/UweLouiliamw4cvRa5OqTMTpJzdAS4JwuN/adNuJ3h8pRUtksLL97aAwW3TMUM8Ym8hShH2NQISK/Z7F3DpbbVVqLA+fqhSs5AGBYfARy9MmYo9fyctMAY7Y68MfiamwuqhD6mEIUMuTqk7HonqFIT9GIXCH1BgYVIgoo7bYO7D9bh12lBhz8+2XYnV2hZVSiGrl6LXL0Wo7w92OVje344JsK7CipRru980jawPAQ/I/JQ/D01CFIjAoTuULqTQwqRBSwzFYH9p/pDC1/u3AZDmfXr7Gx2ijkTtAiNz0Zg2PZWCl1brcb310db//l1fH2ADAiIRKLpg3F/LsGISyEs3YCEYMKEQUF0xUH/nrGiF2lBnzzvfcIf32KBrl6LWana5EykKFFSuwdLuwqrcXvDl0/3v7ZaUNx74g49iAFOAYVIgo6Te12/PW0EbtKa/HtD424JrPgrsHRyNUnY3Z6ErQa3ixRLE3tdvz+cCXH2xODChEFt4Y2G/aeMmLXyVp8d819h4DOmyXm6pPxSHoSEtTse+gPHG9PP8agQkR0VZ3Zir1lBuwqNXhd5iqTAZOHxnSGlvFJiOUdnnuVy+VG4YXL+B3H21M3GFSIiLpR22LBnquh5UR1i7Dcc4fnnHQtZo1PQnQ4/4V/uyx2J/58vAbvH+J4e7oxBhUioluobroihJayS113eFbKZZg2Ig456VrMHJcEzQBOPe0Jo8mKLd9WYBvH21MPMKgQEfmgoqEdu6+GlrOGrqtQQhVy/GRkHHL0Wjw0JpGj2rtRWtOC9w+VY9ePxts/kz0Uj3O8Pd0AgwoR0W364XIbdpcasKu0Fufr2oTloUo5po+KR44+GQ+NSUB4qFLEKsXlGW///jflKK7geHvyHYMKEVEvOF/Xil0nO+/wfLGhXVgeFiLHg6MTkavX4v5RCRgQGhxDyTjennoLgwoRUS9yu904a2jFrtLO0FLVdEVYFx6qwENjOkPLT0bGB+Qk1arGK/igqBw7SmrQZusAwPH2dGcYVIiI+ojb7capS2YhtFxqsQjr1ColZoxNRO4ELaYNj/fry2853p76EoMKEVE/cLvdOFHdgl2lBuwuNcBotgrrosKUeHhcEnInJCN7WCxCFP4RWjzj7d//phynLnG8PfUNBhUion7mcrlxrKq5M7SUGYQR8UDnaZJZ45OQq0/G5KExUEowtNxsvP2ie1IxPIHj7an3MKgQEYnI6XKjuKIJu0prsbfMiMZ2u7AuLjJUCC2TUmNEvzrmQl0r3v+mHH8+xvH21H8YVIiIJKLD6cKR8quh5ZRRGIYGdAaC2ela5Oq1mDh4IOT9FFrcbjcOnud4exIPgwoRkQQ5nC4U/dCIXSdr8dfTRpitHcI6rSZMCC0Zuug+6QPxjLf/4JsKfF/fOSOG4+1JDAwqREQSZ+9w4dD3l7HrpAH7ztQJl/0CQMrAAcjRa5Gbnozxg6LuODxwvD1JDYMKEZEfsTqcKDx/GbtKDdh/tg5X7E5hXWpsOHL0WuSkJ2OMVu1TaCmrMeF3hy5yvD1JDoMKEZGfstid+Prv9dhVasBX5+pgdbiEdWnxEcjVJ2OOXosRid1fheN0ufHlGSN+d4jj7Um6GFSIiAJAu60DX52rx+7SWhT8/TLsHV2hZWRiJHL1ycjVa5EWH4lWqwPbOd6e/ASDChFRgGm1OrD/bB12lxpw8PxlOJxdv75HJapxqcXC8fbkNxhUiIgCmMniwL7TRuwuM+DQhQah/4Tj7clfMKgQEQWJ5nY7Ci9cRlykCtnDYnl5MfmFnn5/K/uxJiIi6gMDI0IxL2OQ2GUQ9QnJjR202WzYtGmT2GUQERGRBPh8RKW6uhp79uyBRqOBxWLBM888c91rtm/fDpfLBYvFgsmTJ2PcuHHYvHkzli1bBqWy60dqtVqUlZUBAB5//HF8++23AIAJEybgueeeu933RERERAHC56CycuVKvPfee5DJZDh48CC2bduGvLw8YX1hYSHsdjuefvppAMCLL76IDRs2YNCgQWhoaBCCSmNjI/70pz8J282fPx87duy40/dDREREAcSnUz9lZWVwOBxCo1Z2djby8/O9XvPOO+9g2rRpwvP4+Hjs3bsXM2bM8DqasmPHDjz22GPC89BQ3p2TiIiIvPkUVIqLi5GUlCQ8DwkJQVVVFTo6Orxeo9VqhedarRbFxcXX7auurg6xsbHC83Xr1iE6Ohp6vR6FhYU3rMFms8FsNns9iIiIKDD5FFTq6+uhUqm8likUCjQ0NNzwNSqVCkaj0Wubc+fOYfTo0V7L1qxZg+bmZuTn52PhwoVobGzstobVq1dDo9EID51O58tbICIiIj/iU1BJSEiA1Wr1WuZ0OhEXF3fD19jtdiQmJnpt8/nnnyM3N9dr2ZQpUyCTyXDfffchLy8PRUVF3dawYsUKmEwm4VFdXe3LWyAiIiI/4lNQycrK8goGDocDOp3Oq/dk0qRJXq8xGo3Iysry2o/VakVERMQNf45Wq8WAAQO6XadSqRAVFeX1ICIiosDkU1DR6/WQy+Ww2+0AgKKiIixZsgQFBQUoKCgAACxbtgz79u0TtjEYDMjJyRGeV1ZWYvjw4V77NRgMsFg6b6Dldrtx4sQJTJ069fbeEREREQUMny9Pfuutt7BhwwbExMTAarVi8eLFWLp0KQBg+vTpuPfee1FRUYGtW7eipaUFS5YsgVzelYcOHDiAuXPneu3zwIED2Lx5M2bNmgWFQoHly5ff9IgLERERBQfe64eIiIj6XU+/vyU3Qp+IiIjIg0GFiIiIJMvv757sOXPFwW9ERET+w/O9fasOFL8PKq2trQDAwW9ERER+qLW1FRqN5obr/b6Z1uVyoba2Fmq1WrgHUW8wm83Q6XSorq5mk+4t8LPyDT+vnuNn1XP8rHqOn1XP9eVn5Xa70draiuTkZK+rg3/M74+oyOVypKSk9Nn+OVSu5/hZ+YafV8/xs+o5flY9x8+q5/rqs7rZkRQPNtMSERGRZDGoEBERkWQxqNyASqXCG2+8cd3doul6/Kx8w8+r5/hZ9Rw/q57jZ9VzUvis/L6ZloiIiAIXj6gQERGRZDGoEBERkWQxqBAREZFkMagQEVFQcrvdqKqqws6dO8UuRfJMJhPWrl2L8+fP9/vPZlC5gerqamzcuBEff/wxPvjgA7HLkbT9+/cjNzdX7DL8QnFxMebMmYOJEyfiySefRFtbm9glSVZFRQWeeOIJZGZm4ic/+Qnq6+vFLknyrFYrHnvsMbHLkLySkhIkJCRAp9MhOzsb4eHhYpckaSUlJVi0aBGefPJJjBw5st9/PoPKDaxcuRLPP/88FixYgLS0NGzbtk3skiRpx44dOH78OL9we8But+Pzzz/Hp59+imPHjkGtVuPNN98UuyzJ+u677/CHP/wBR48exZAhQ3D8+HGxS5K83/72tygpKRG7DMkzm80oLS1FTU0Nampq8OCDD4pdkmRVVFTgueeew7vvvgutVitKDQwq3SgrK4PD4RDuHZSdnY38/HyRq5KmWbNm4fHHHxe7DL9gNBrxyiuvQKnsvHPFvHnzcPbsWZGrkq4nnngCCoVCOErw8MMPi12SpG3fvh05OTlil+EXWltbERsbK3YZfmHZsmV4/fXXkZiYKFoNDCrdKC4uRlJSkvA8JCQEVVVV6OjoELEqaVKr1WKX4DcGDx6M+Ph44fnp06cxc+ZMESuSvlOnTuHll1/GG2+8gcLCQrHLkaxjx44hMjJSlMPy/qi1tRVjxoxBfHw8XnzxRVitVrFLkiSDwYCioiLk5uZi+/btWLBgAQwGQ7/XwaDSjfr6+uum8CkUCjQ0NIhUEQWapqYmnD59Gi+88ILYpUjakCFDsGnTJqxZswZ5eXngfMrrmUwmFBQU8GiKDzIzM1FSUoLy8nK0trZi1apVYpckSd999x2ysrIwYMAA/OxnP8O8efPwxhtv9HsdDCrdSEhIuC5hO51OxMXFiVQRBRKHw4H169dj/fr1wmkg6p7niN3MmTNhsVjQ2NgockXS8+GHH+Krr77Co48+ikcffRT19fV49NFHcejQIbFLk6wxY8YgOjoakZGR2LhxI7788kuxS5Ikq9WKmJgY4XlGRgaOHDnS73Xwt2Q3srKysH//fuG5w+GATqfjlwrdMZfLhXfffRevvfYaIiMjxS7Hb7jdboSGhrKvoBtLly7F0qVLheepqan47LPPxCvIz0RERIjafyFlgwcPRl1dnfC8o6NDlHv+8IhKN/R6PeRyOex2OwCgqKgIS5YsEbkqCgRr1qzBU089JYSULVu2wGaziVyV9Njtdq/LkT/55BO8/PLLQoM70Z24ePGi8OeCggI88sgjIlYjXXfffTcMBoNwJLO0tFSUURS8KeEN1NTUYMeOHYiJiYHVasXixYvFLkmSGhoa8Nvf/hb/9V//hS1btvAyv5v48MMPsXz5cuGogMvlQlNTE4xGo8iVSU95eTkWLFiAxx57DGlpaWhqasKzzz4LuZz/trqV1NRUVFRUiF2GZF25cgU//elPkZqaiszMTCiVSvz85z8XuyzJKi0txQcffIApU6bg7NmzWL58OcLCwvq1BgYVIiIikiz+84SIiIgki0GFiIiIJItBhYiIiCSLQYWIiIgki0GFiIiIJItBhYiIiCSLQYWIiIgki0GFiIiIJItBhYiIiCSLQYWIiIgki0GFiIiIJItBhYiIiCSLQYWIiIgk6/8BEycvrJZ0fRcAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(res.index, res['rate'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d94a726f",
   "metadata": {},
   "source": [
    "## 最后一次通话时间"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "65159122",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:49.613611Z",
     "start_time": "2024-10-29T17:16:49.554455Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 62.5  77.5  94.5 113.5 129.5 145.5 162.5 180.5 205.5 249.5 322.5 393.5\n",
      " 524.5 730.5]\n",
      "1\n"
     ]
    }
   ],
   "source": [
    "colname = '最后一次通话时间'\n",
    "x = train[colname]\n",
    "bins = decision_tree_binning(x, y, max_leaf_node=15)\n",
    "print(bins)\n",
    "direction = check_monotonicity(x, y, bins)\n",
    "print(direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "da2ab752",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:49.637282Z",
     "start_time": "2024-10-29T17:16:49.623375Z"
    }
   },
   "outputs": [],
   "source": [
    "train['最后一次通话时间'] = np.digitize(x, bins, right=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "625f8807",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:49.668393Z",
     "start_time": "2024-10-29T17:16:49.637282Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>最后一次通话时间</th>\n",
       "      <th>是否订阅</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>最后一次通话时间</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4517</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2096</td>\n",
       "      <td>12</td>\n",
       "      <td>0.005725</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2535</td>\n",
       "      <td>42</td>\n",
       "      <td>0.016568</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2810</td>\n",
       "      <td>79</td>\n",
       "      <td>0.028114</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2303</td>\n",
       "      <td>70</td>\n",
       "      <td>0.030395</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2164</td>\n",
       "      <td>98</td>\n",
       "      <td>0.045287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2158</td>\n",
       "      <td>112</td>\n",
       "      <td>0.051900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2122</td>\n",
       "      <td>150</td>\n",
       "      <td>0.070688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2532</td>\n",
       "      <td>190</td>\n",
       "      <td>0.075039</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>3630</td>\n",
       "      <td>362</td>\n",
       "      <td>0.099725</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>4174</td>\n",
       "      <td>537</td>\n",
       "      <td>0.128654</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2734</td>\n",
       "      <td>391</td>\n",
       "      <td>0.143014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2899</td>\n",
       "      <td>587</td>\n",
       "      <td>0.202484</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2306</td>\n",
       "      <td>809</td>\n",
       "      <td>0.350824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2208</td>\n",
       "      <td>1200</td>\n",
       "      <td>0.543478</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          最后一次通话时间  是否订阅      rate\n",
       "最后一次通话时间                          \n",
       "0             4517     1  0.000221\n",
       "1             2096    12  0.005725\n",
       "2             2535    42  0.016568\n",
       "3             2810    79  0.028114\n",
       "4             2303    70  0.030395\n",
       "5             2164    98  0.045287\n",
       "6             2158   112  0.051900\n",
       "7             2122   150  0.070688\n",
       "8             2532   190  0.075039\n",
       "9             3630   362  0.099725\n",
       "10            4174   537  0.128654\n",
       "11            2734   391  0.143014\n",
       "12            2899   587  0.202484\n",
       "13            2306   809  0.350824\n",
       "14            2208  1200  0.543478"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res = train.groupby(by='最后一次通话时间').agg(func={'最后一次通话时间': 'count', '是否订阅': 'sum'})\n",
    "res['rate'] = res['是否订阅'] / res['最后一次通话时间']\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f15e9616",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:49.952495Z",
     "start_time": "2024-10-29T17:16:49.671408Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f0355caf80>]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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V19fr9tvv12XX3657rrrLp08edLskkzh9Xr1mc98xuwyTLN161bdc889uuuuuzRp0iSzy4m7d999V//5n/+p//mf/9E3v/nNtNjjaePGjbrtttv63ffss8/ql7/8pX72s59p165dJlUWH6e+/lAopG9+85uaO3euqqur9bvf/c7E6uJjoL8DEb/+9a+1bt26uNaTFqFj+fLluvfee7VgwQJVVVVp/fr1ZpcUN36/Xy+++KKef/55bdu2Tfn5+fre975ndlmmePzxx7V161azyzDFwYMH9dWvflWPPfaYRo8ebXY5pvi3f/s33X///fr85z+vm266Sf/xH/9hdknD6rnnntPbb7/d74eMzZs3y+/366677tI999yj1atXKxQKmVjl8Bno9T/99NNauHChamtr9Zvf/Eb33HOPWltbTaxyeA30HkTs3r1bjzzyyDk3aBtqKR86du7cqUAgEN3LZfbs2Vq1apXJVcVPY2Oj/vmf/1kZGeGO93fccYd2795tclXx9+yzz+rWW281uwzT3H///frWt76lUaNGmV2KaY4fPx79f6C8vFzBYNDkiobXvHnz9NnPfrbffY8++qiuu+666HFpaaleeumleJcWFwO9/qlTp2rGjBmSpIkTJ2rcuHE6dOiQCdXFx0DvgRTelO3ll1/WvHnz4l5TyoeO+vp6lZeXR48zMzPV0NCgnp4eE6uKn7Fjx6q0tDR6vGvXLt10000mVhR/27Zt04gRI9JySkGSjh07prq6Ot1222169tlntWDBAh07dszssuLuYx/7mL7//e8rEAjI5XLp61//utklDav8/PzT7quvr+830jV69GjV19fHs6y4Gej119TURG/7fD55vV5NnTo1nmXF1UDvgRQe9b3vvvviXE1YyoeOpqam07qv2Ww2tbS0mFSReU6cOKFdu3bpH//xH80uJW7cbrdqa2vTepTjzTffVE1NjXJycvT3f//3uuOOO/Sd73zH7LLi7tvf/rZKSkr09NNP61e/+pW6urrMLinuTv3/0G63q7Gx0cSKzLN69Wr98Ic/VHZ2ttmlxNXatWv16U9/WllZWab8/gm1y+xwKCsr0969e/vdFwwGVVJSYlJF5ggEAlq9erVWr14dnWpJB+vWrdMrr7yiLVu2SAr/p3vnnXfqG9/4Rr9h5lTm9XpVVFQUPZ4xY4ZWrlxpYkXmuPvuu/Xzn/9cmZmZmjVrlubPn6833ngjOuWSDsrKyuT1epWTkyMpvOYrHafcNm3apKqqKn3yk580u5S48nq9+slPfqIXXnhBkrRnzx7l5uZq69atWr16dVxqSPlPn5qaGm3cuDF6HAgE5HQ60+qDNxQK6bHHHtMDDzygESNGmF1OXC1dulRLly6NHo8bNy76Dy5djB07VsePH48e9/T0pN3eE83NzTp48KAyMzMlhef2Q6GQWltb0+oHkCuvvFIulys61djY2NhvyiEdbN26VZ2dnZo/f77ZpcRddna2Xnvttejxd7/7XY0bN05333133GpI+emV6upqWa1W+f1+SVJdXZ2WLFliclXx9fDDD+sLX/hCNHD8/Oc/l8/nM7kqxMtVV12lY8eORVfpv/POO2e8hC5VFRUVye12R//ee71e5ebmplXgkMILil9++eXo8bFjx9Jq6nHnzp167733dMstt0gK/xC6du1ac4tKM2nx4/7KlSu1Zs0aFRUVyev1avHixWaXFDfr1q3To48+qqefflpSeNTjxIkT+tKXvmRyZYgXm82m9evX6/vf/76uvvpq7du3Tw8++KDZZcWVzWbTY489pm9/+9u67LLLdODAAT3xxBNmlzWsWlpa9Itf/EL79u3TK6+8oo9//OO6/vrrdfDgQf3iF79Qe3u7lixZIqs1NX/2PPX1X3fddVqwYIEsFosefvhhSVJra6u+9a1vmVzp8Bno74DZ2GUWAADERWpGXAAAkHAIHQAAIC4IHQAAIC4IHQAAIC4IHQAAIC4IHQAAIC4IHQAAIC4IHQAAIC4IHQAAIC4IHQAAIC4IHQAAIC4IHQAAIC4IHQAAIC7+L6/0f/11RIjhAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(res.index, res['rate'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf2fda56",
   "metadata": {},
   "source": [
    "## 本次营销活动联系次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "2d767c23",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:49.990754Z",
     "start_time": "2024-10-29T17:16:49.954624Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.5 2.5 3.5 4.5 6.5]\n",
      "-1\n"
     ]
    }
   ],
   "source": [
    "colname = '本次营销活动联系次数'\n",
    "x = train[colname]\n",
    "bins = decision_tree_binning(x, y, max_leaf_node=6)\n",
    "print(bins)\n",
    "direction = check_monotonicity(x, y, bins)\n",
    "print(direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "9d5b2a4f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.004036Z",
     "start_time": "2024-10-29T17:16:49.990754Z"
    }
   },
   "outputs": [],
   "source": [
    "train['本次营销活动联系次数'] = np.digitize(x, bins, right=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "74f8c40c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.020394Z",
     "start_time": "2024-10-29T17:16:50.004036Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>本次营销活动联系次数</th>\n",
       "      <th>是否订阅</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>本次营销活动联系次数</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>17642</td>\n",
       "      <td>2300</td>\n",
       "      <td>0.130371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10570</td>\n",
       "      <td>1211</td>\n",
       "      <td>0.114570</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5341</td>\n",
       "      <td>574</td>\n",
       "      <td>0.107471</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2651</td>\n",
       "      <td>249</td>\n",
       "      <td>0.093927</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2578</td>\n",
       "      <td>195</td>\n",
       "      <td>0.075640</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2406</td>\n",
       "      <td>111</td>\n",
       "      <td>0.046135</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            本次营销活动联系次数  是否订阅      rate\n",
       "本次营销活动联系次数                            \n",
       "0                17642  2300  0.130371\n",
       "1                10570  1211  0.114570\n",
       "2                 5341   574  0.107471\n",
       "3                 2651   249  0.093927\n",
       "4                 2578   195  0.075640\n",
       "5                 2406   111  0.046135"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res = train.groupby(by='本次营销活动联系次数').agg(func={'本次营销活动联系次数': 'count', '是否订阅': 'sum'})\n",
    "res['rate'] = res['是否订阅'] / res['本次营销活动联系次数']\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "5b1b8313",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.183407Z",
     "start_time": "2024-10-29T17:16:50.022085Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f035a3de10>]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiQAAAGdCAYAAAAi3mhQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5SUlEQVR4nO3dd3SUZd7G8euZSSMVQkhCCV1KQgdBiogNVEBQFEFxVywgVVfXXdnVZS277rpro1p21woWFhVUUASDkaKUUEOvSYAkhEASIMlMMvP+ETaaV8EEk9yZme/nnDnHTHGuzFHm4vnd9/NYbrfbLQAAAINspgMAAABQSAAAgHEUEgAAYByFBAAAGEchAQAAxlFIAACAcRQSAABgHIUEAAAY52c6QEW4XC4dPXpUYWFhsizLdBwAAFABbrdb+fn5atSokWy2Cx8D8YhCcvToUcXFxZmOAQAALkJaWpqaNGlywed4RCEJCwuTVPoLhYeHG04DAAAqIi8vT3FxcWXf4xfiEYXkf2Oa8PBwCgkAAB6mIsstWNQKAACMo5AAAADjKCQAAMA4CgkAADCOQgIAAIyjkAAAAOMoJAAAwDgKCQAAMI5CAgAAjKOQAAAA4ygkAADAOJ8vJG6323QEAAB8nk8XkkJniW59ea0WbT5iOgoAAD7NI672W13eXntYGw6f1IbDJ7ViZ5aeGtZBEcH+pmMBAOBzfPoIyV19m+uBqy+R3WZp8Zajuu6lJK3Zl206FgAAPsenC4m/3abfXNtG/72/t5rXD9ax3ELd/q/v9PSnO1ToLDEdDwAAn+HTheR/ujatp8+mXq7RPZtKkv616qCGzVqtncfyDCcDAMA3UEjOCQn00zM3d9S/ftVDUaEB2p2Zr2GzVuvVpP1yudiJAwBAdaKQ/D/XxMfo8wf765r20XKUuPTXJbt0+7++1ZFTBaajAQDgtSgkPyEqNFCv/aqHnrm5o4ID7Pr2QI6uezFJH286wnlLAACoBhSS87AsS6N7NtWSqZera9O6yi8s1oPvb9bkdzfp1FmH6XgAAHgVCsnPaB4VogXje+uha9vIbrP02dZjuu7Fb7RqL9uDAQCoKhSSCvCz2zT16kv04YQ+ahkVooy8Qo3593d64pMUtgcDAFAFKCSV0Dmurj6d2k9jLivdHvz66kMaOnOVUo7mGk4GAIBno5BUUnCAn54e3lGv33WpokIDtTfrtIbPXq25K/erhO3BAABcFArJRbqyXbS+ePByDYyPkbPErb9/vkujX/1WaTlnTUcDAMDjUEh+gfqhgXrlzu56dkQnhQTYte5Qjq5/6Rst3JjO9mAAACqBQvILWZalkZfGaekD/dW9WT2dLirWwwu2aOK8ZJ08w/ZgAAAqgkJSRZrWD9YH43vrkUFt5WeztHR7hga9mKSv9xw3HQ0AgFqPQlKF7DZLk65srY8m9lWrBiHKyi/Sr/+zTtMXbVeBg+3BAACcD4WkGnRsEqFPp1yuX/duJkl6c+1hDZn5jbYfYXswAAA/hUJSTeoE2PXEsA568+6eig4L1P7jZzR89mrNTtzH9mAAAP4fCkk1u6JNA33xYH9d3yFWxS63/vHFbt32ylqlnmB7MAAA/0MhqQH1QgI0545u+uetnRUa6KcNh0/q+peS9MGGNLYHAwAgCkmNsSxLt3RvoqUPXK5Lm9fTGUeJfvffrbr/nY3KYXswAMDHUUhqWFxksN4b11u/u66t/O2WvkjJ1KAXk5S4O8t0NAAAjKGQGGC3WZo4oHR7cOvoUB3PL9LY19fr8Y/ZHgwA8E0UEoM6NI7Qp1P6aWzf5pKkt789rMEzvtGWtFNGcwEAUNMoJIYF+ds1fWiC3r6np2LCA3Ug+4xGzF2jGSv2qrjEZToeAAA1gkJSS1x+Sen24MGdGqrY5dbzX+7RyFfW6vCJM6ajAQBQ7SgktUjd4ADNGt1VL9zWWWGBfkpOPaXrX/pG761LZXswAMCrUUhqGcuydFPXJlr64OXq1SJSZx0levTDbbrvrY3KPl1kOh4AANWCQlJLNakXrPn3XaZp17eTv93S8p2Zuu7FJH21K9N0NAAAqhyFpBaz2yyNv6KVFk3qpzYxoco+7dDdb2zQHz7aprOOYtPxAACoMhQSDxDfKFyLJ/fTvf1aSJLmf5eqG176RptSTxpOBgBA1aCQeIggf7seGxKv+ff2UsOIIB06cVa3vLxWL3y5h+3BAACPRyHxMH1aR+nzB/rrxs6NVOJy66UVezXi5bU6mM32YACA56KQeKCIYH/NGN1VL43qorAgP21JO6UbXvpG8747zPZgAIBHopB4sGFdGuuLB/urd8v6KnCW6I8fbde9b27Q8Xy2BwMAPAuFxMM1qltH8+7tpccGt1eA3aYVu7J03YtJ+nIH24MBAJ6DQuIFbDZL917eUoun9FW72DCdOOPQfW9t0KMLt+pMEduDAQC1X6UKSVpaml555RW99957ev3113/yOUVFRRo2bJhWrlxZ7v7169dr6NCh6tatm0aPHq3Tp09fdGj8tHax4Vo0ua/G9W8py5LeW5+mG2Z8o42H2R4MAKjdKlVInnzySY0bN06jRo1Sy5YtNX/+/HKPHz16VM8//7yKisqvYXA4HFq0aJE++ugjJScnKywsTE899dQvT48fCfSz6w83tNf8ey9To4ggHT5xVre+vEbPL9stJ9uDAQC1VIULybZt2+R0OmVZliSpT58+mjlzZrnnhIWFadq0aYqNjS13f0ZGhh544AH5+flJkoYNG6adO3f+0uy4gN6t6mvpg/01vEsjudzSjK/2acTcNdp/nCNTAIDap8KFZP369eWKhr+/v1JTU1Vc/P0ahbCwsJ98bdOmTdWgQYOyn1NSUjRw4MDzvldRUZHy8vLK3VB5EXX89eKorpo5uqvCg/y0NT1Xg2d8o7fXHmJ7MACgVqlwIcnKylJgYGC5++x2u7Kzsyv1hjk5OUpJSdH9999/3uc888wzioiIKLvFxcVV6j1Q3tDOjfTFb/qrb+v6KnS69PiiFI19Y72y8gtNRwMAQFIlCkl0dLQKC8t/gZWUlCgqKqrCb+Z0OjVr1izNmjWrbHzzU6ZNm6bc3NyyW1paWoXfAz+tYUQdvX13L/1pSLwC/Gxaufu4Br2QpM+3Z5iOBgBAxQtJjx49yhUDp9OpuLi4CxaLH3K5XJozZ44eeuih8452/icwMFDh4eHlbvjlbDZLd/droU+n9FN8w3CdPOvU/e9s1CMLtug024MBAAZVuJB06tRJNptNDodDkrRmzRpNnjxZiYmJSkxM/NnXP/vssxozZoxCQ0MlSW+99daPduOgZrSJCdNHk/ro/itaybKkBRvTdf1LSdpwKMd0NACAj7LclVjdmJ6ergULFigyMlKFhYUaP368pk6dKkmaMWOGJCkpKUkTJ07U1VdfXbbj5s0339Sjjz6q+vXrSyo9WpKTk6OMjIqNC/Ly8hQREaHc3FyOllSx7w6c0EMfbNGRUwWyWdKEAa30wNVtFODHOfMAAL9MZb6/K1VITKGQVK+8Qqf+vDhFHyYfkSR1aByuF2/rotbRFx6tAQBwIZX5/uavwVB4kL+eH9lFc+7oprrB/tp+JE+DZ6zSG6sPsj0YAFAjKCQoc0PHhvriwf66/JIoFRW79OdPduhX/1mnzDy2BwMAqheFBOXEhAfprbt76okbExToZ9M3e7M16MUkLdl2zHQ0AIAXo5DgRyzL0q/7NNdnU/spoVG4Tp11auK8ZD30wWblFTpNxwMAeCEKCc6rdXSYPprYV5OubCWbJX2YfETXv/iN1h1kezAAoGpRSHBBAX42PTKonT4Y31txkXV05FSBbnt1rf62dJccxVw9GABQNSgkqJAezSO1ZOrlurV7E7nd0stf79fw2au1JzPfdDQAgBegkKDCwoL89Y9bO+vlMd1UL9hfO47lacjMVfrPqoNyudgeDAC4eBQSVNp1HUq3Bw9o20COYpee/LR0e3BGLtuDAQAXh0KCixIdHqTX77pUTw1LUJC/Tav2lW4P/mTLUdPRAAAeiEKCi2ZZlu7s3VyfTb1cnZpEKLfAqSnvbtKD721SbgHbgwEAFUchwS/WqkGoFk7oo6lXtZbNkj7efFTXv5iktftPmI4GAPAQFBJUCX+7TQ8NbKsF9/dRs/rBOppbqNv/9a3+umSniopLTMcDANRyFBJUqe7N6mnJ1Ms16tI4ud3Sq0kHNGzWau3KyDMdDQBQi1FIUOVCAv30txGd9Oqd3RUZEqBdGfm6ceZqPbdst/Zm5nMFYQDAj1huD/h2yMvLU0REhHJzcxUeHm46DirheH6Rfr9wq77alVV2X4uoEA1MiNHA+Fh1jasrm80ymBAAUF0q8/1NIUG1c7vdWrzlqD7edESr952Qo+T7U843CAvUtfExGhgfo96t6ivQz24wKQCgKlFIUGvlFzr19Z7jWpaSqcRdWcovKi57LCzQTwPaRWtgfIwGtG2gsCB/g0kBAL8UhQQewVHs0toDJ7QsJUPLdmTqeH5R2WMBdpv6tK6vgfGxuiY+WtFhQQaTAgAuBoUEHsflcmtz+il9kZKhZSmZOph9puwxy5K6Na2ngfExGpQQq+ZRIQaTAgAqikICj+Z2u7X/+Gl9kZKpZSkZ2pKeW+7xNjGhGpQQq4HxserQOFyWxaJYAKiNKCTwKsdyC/TljkwtS8nUtwdOqPgHVxZuFBGkgQmxGhgfo54tIuVnZyc7ANQWFBJ4rdyzTn21u7ScrNx9XAXO788CWzfYX1e1i9bA+Fhd0aaB6gSwYwcATKKQwCcUOku0am+2lu3I0PKdWco54yh7LMjfpssvaaCB8TG6pn2M6oUEGEwKAL6JQgKfU1zi0sbDJ0vXnezIUPrJgrLH7DZLlzavp0EJsbo2PkZN6gUbTAoAvoNCAp/mdru181h+6Y6dHZnaeaz8dXQSGoWXLopNiFHbmDAWxQJANaGQAD+QlnO2rJxsOJSjH6yJVbP6wRoYH6OBCbHq1rSe7JzGHgCqDIUEOI8Tp4u0YmeWlu3IUNLebDmKvz+NfVRogK5pH6OBCTHq0ypKQf4sigWAX4JCAlTAmaJiJe05rmU7MrViZ6byCr8/jX1IgF0D2kZrYEKMrmwXrXBOYw8AlUYhASrJWeLSdwdyzo12MpSZ9/1p7P3tlnq3itLA+BhdGx+jmHBOYw8AFUEhAX4Bl8utbUdyy9ad7Ms6Xe7xLnF1yxbFtmoQaiglANR+FBKgCu0/flrLzm0n3pR6qtxjraNDy66x07FxhGwsigWAMhQSoJpk5hWWnsZ+R6bW7s+Ws+T7/31iw4N07bly0qtlpPw5jT0AH0chAWpAboFTK3dnadmOTK3claUzju9PYx8e5Ker2kVrUEKs+rdpoJBAP4NJAcAMCglQwwqdJVq7/4S+SMnQ8p2Zyj79/WnsA/xs6n9JlAbGx+rq9tGqHxpoMCkA1BwKCWBQicutTakn9UVKhr5IyVRqztmyx2yW1KN5ZNm6k7hITmMPwHtRSIBawu12a0/m6bLtxNuPlD+NffuG4efOFBuj+IbhnMYegFehkAC1VPrJs6WLYlMyte5Qjkp+cB77JvXqaGB8rAYlxKhH80hOYw/A41FIAA9w8oxDK3ZlaVlKhpL2Hleh8/vT2EeGBOia9tEaGB+rfpdwGnsAnolCAniYAkeJkvYe1xcpGVqxM0u5Bc6yx4ID7LqiTQMNTIjRVW1jFBHMaewBeAYKCeDBiktcWncop/RkbCkZOppbWPaYn83SZS3ra2BC6WnsG0bUMZgUAC6MQgJ4CbfbrZSjeaWLYlMytTszv9zjnZtEaGBC6bqTVg1CWRQLoFahkABe6lD2GS3bUVpONqae1A//720ZFaJrE2I0tFMjdWgcYS4kAJxDIQF8QFZ+oVbsLF0Uu3rfCTlKvl8Ue1PXxpp2fTtFc2ViAAZRSAAfk1/o1Nd7jmvptgwt2X5MbrcUGuin31zbRr/u3Ux+XFcHgAEUEsCHbU0/pccXpWhL2ilJUtuYMD05LEG9WtY3GwyAz6GQAD7O5XLrgw1p+vvnu3TybOkW4uFdGukPN7RnjAOgxlTm+5vjuIAXstksjerZVIm/HaA7ejWVZUkfbz6qq577Wv/65oCcP1hvAgC1AUdIAB+wNf2U/rQoRZvPjXHaxITqyWEddBljHADViJENgB9xudxasDFNf/98t3LOOCRJw86NcWIY4wCoBoxsAPyIzWbptkub6quHr9CYy0rHOIs2H9VV/1yp15IY4wAwiyMkgI/afiRXjy/ark2ppyRJl0SXjnF6t2KMA6BqMLIBUCEul1v/TU7X35buKhvjDO3cSH+8ob1iIxjjAPhlGNkAqBCbzdLIHnFKfHiAftW7mWyW9MmWo7r6uZV6NWk/YxwANYYjJADKbD+Sqz8t2q7kH4xxnhiWoD6toswGA+CRGNkAuGgul1sLz41xTpwb4wzp1FCPDY5njAOgUhjZALhoNpulW3vE6auHB+jX58Y4n249pqueW6lXvt4vRzFjHABVjyMkAC4o5Wiu/rQoRRsPn5QktWoQoieHdVDf1oxxAFwYR0gAVJmERhFaML63/nlrZ9UPCdD+42d0x7++06T5yTqWW2A6HgAvQSEB8LNsNku3dG+ir347QHf1aS6bJX229Ziufu5rvcwYB0AVYGQDoNJSjuZq+qIUbfjBGOeJGzuo3yWMcQB8j102AKqd2+3Wh8lH9MzSnco+XbobZ3DHhvrj4PZqVLeO4XQAagPWkACodpZlaUT3Jlrx8A/GONtKxzhzVzLGAVA5HCEBUCV2HM3T9MXbtf5Q6RinZYMQPXFjgi6/pIHhZABMYWQDwAi3262PNh3RX5fsUvbpIknSDR1j9djgeMY4gA9iZAPACMuydHO3Jvrqt1fo7r4tZLdZWrItQ1c/97VmJ+5TUXGJ6YgAaimOkACoNrsy8vSnj1O07lCOJKllVIj+fGOC+rdhjAP4AkY2AGoNt9utRZuP6i9Ldup4fukY57qEWD0+NF6NGeMAXo2RDYBaw7IsDe/aWF89fIXu6Vc6xvk8JUNXP7eSMQ6AMhwhAVCjdmfk6/FF27XuYOkYp8W5Mc4VjHEAr1NtI5u0tDQtWbJEERERKigo0NixY3/0nKKiIo0cOVK/+c1vNGDAgEq9tip+IQC1n9vt1uItR/X0Z9+PcQYlxOjxIfFqUi/YcDoAVaXaRjZPPvmkxo0bp1GjRqlly5aaP39+ucePHj2q559/XkVFRZV+LQDfYVmWhnUpHePce26M80VKpq55/mvN+movYxzAB1W4kGzbtk1Op1OWZUmS+vTpo5kzZ5Z7TlhYmKZNm6bY2NhKvxaA7wkL8tdjQ+K1ZOrl6tUiUoVOl/65bI8GvZCklbuzTMcDUIMqXEjWr19frmj4+/srNTVVxcXFZfeFhYVd9Gt/qKioSHl5eeVuALxX29gwvTfuMr00qouiwwJ16MRZ3fX6eo17a4PScs6ajgegBlS4kGRlZSkwMLDcfXa7XdnZ2VX+2meeeUYRERFlt7i4uIrGBOCh/jfGWfHwFbrv8hbys1latqN0jDNzxV4VOhnjAN6swoUkOjpahYWF5e4rKSlRVNTPX268sq+dNm2acnNzy25paWkVjQnAw4UF+euPg+O19IHL1btlfRUVu/Tcl3s06MUkJTLGAbxWhQtJjx49yhUDp9OpuLg4+fn5VflrAwMDFR4eXu4GwLdcEhOm+ff10ozRXRUTHqjDJ85q7OvrdR9jHMArVbiQdOrUSTabTQ6HQ5K0Zs0aTZ48WYmJiUpMTLyo1wLAhViWpRs7N9KKhwdoXP+W8rNZ+vLcGGcGYxzAq1TqPCTp6elasGCBIiMjVVhYqPHjx2vq1KmSpBkzZkiSkpKSNHHiRF199dXldtz81GsrivOQAJCkvZn5mr44RWv2n5AkNasfrOlD43VVuxjDyQD8FK5lA8Brud1ufbr1mJ7+bIcy80rPeXRN+xhNHxqvuEhOqgbUJlzLBoDXsixLQ8+NccafG+Ms31k6xnlx+R7GOICH4ggJAI+2L6t0jLN6X+kYp2lk6Rjn6vaMcQDTOEICwGe0jg7TO/f00uzbuyk2PEipOWd1z5sbdM8b65V6gt04gKegkADweJZlaXCnhlrx8BW6/4pW8rdbWrErS9e88LVe+JIxDuAJKCQAvEZIoJ8evb6dlj7QX/1aR8lR7NJLK/bq2he+1vIdmabjAbgACgkAr9M6OlRv39NTc+7opoYRQUrLKdC9b23Q3W+s1+ETZ0zHA/ATKCQAvJJlWbqhY0Mtf+gKTRhQOsb5aleWrn0hSc8zxgFqHXbZAPAJ+4+f1p8Xp+ibvaUX9WxSr46mD03QNe2jZVmW4XSAd2KXDQD8P60ahOqtu3tq7h3d1CgiSOknC3TfuTHOoWzGOIBpFBIAPsOyLF3fsaGWP3yFJp4b4yTuPq6BLyTp+WW7VeBgjAOYwsgGgM86cPy0pv9gjNO4bh1NHxqva+NjGOMAVYCRDQBUQMtzY5yXx3RT47p1dORUgca9vVFjGeMANY5CAsCnWZal6zo01JcP9dekK1spwG7TynNjnOcY4wA1hpENAPzAwewzmr44RUl7jksqHeP8aWi8BjLGASqNkQ0AXKQWUSF6c+ylenlM97Ixzvi3N+qu19frIGMcoNpwhAQAzqPAUaLZifv0atIBOUpcCrDbdF//Fpp0ZWsFB/iZjgfUehwhAYAqUCfArt8OaqsvftNfA9o2kKPEpdmJ+3Xt80n6fPsx0/EAr0IhAYCf0SIqRK/fdalevfP7Mc797yRr2ofb5Ch2mY4HeAUKCQBUgGVZGpgQq+UPXaFJV7aSZUnvrkvV6Ne+VVZ+oel4gMejkABAJdQJsOuRQe30n7suVViQnzYePqkbZ67WlrRTpqMBHo1CAgAX4cq20Vo0qa9aNQhRRl6hbn1lrRZuTDcdC/BYFBIAuEgtG4Tq40l9dU37aDmKXXp4wRY99ekOFZewrgSoLAoJAPwCYUH+evXOHpp6VWtJ0r9XHdSvX1+nk2cchpMBnoVCAgC/kM1m6aGBbTX3jm4KDrBr9b4TunH2Ku3KyDMdDfAYFBIAqCLXd2yoDyf2UVxkHaXlFOjmOWu0dBvnKwEqgkICAFWoXWy4Fk/qp76t6+uso0QT5iXruWW75XLV+pNiA0ZRSACgitULCdCbY3vqnn4tJEkzv9qncW9vUH6h03AyoPaikABANfCz2/T4kHg9d2tnBfjZtHxnlobPXq0Dx0+bjgbUShQSAKhGI7o30YLxvRUbHqT9x89o2OzVStydZToWUOtQSACgmnWOq6vFU/qqR7N6yi8s1t1vrNeclfvkARdbB2oMhQQAakB0WJDm33eZRvdsKrdbevbz3Zry7iYVOEpMRwNqBQoJANSQAD+bnrm5o54e3kF+Nkufbj2mEXPXKC3nrOlogHEUEgCoYWMua6b5912m+iEB2nEsT8Nmr9ba/SdMxwKMopAAgAE9W0Tqkyn91KFxuHLOODTm39/pzTWHWFcCn0UhAQBDGtWto//e30fDuzRSicut6YtT9PuFW1VUzLoS+B4KCQAYFORv1wu3ddEfb2gvmyV9sCFdo179Vpl5haajATWKQgIAhlmWpfv6t9QbY3sqPMhPm1JPaejMVdqUetJ0NKDGUEgAoJbo36aBFk/upzYxocrKL9Jtr3yrDzakmY4F1AgKCQDUIs2jQvThxL4aGB8jR4lLv/vvVv15cYqcJS7T0YBqRSEBgFomNNBPL4/prgevuUSS9MaaQ/rVv9cp54zDcDKg+lBIAKAWstksPXhNG71yZ3eFBNi19sAJDZ25SilHc01HA6oFhQQAarFBCbH6aFJfNa8frCOnCjRi7hp9suWo6VhAlaOQAEAt1yYmTIsm9dPll0Sp0OnSlHc36dnPd6nExUnU4D0oJADgASKC/fXG2J4a37+lJGnOyv269831yi1wGk4GVA0KCQB4CLvN0rQb2uulUV0U6GdT4u7jumn2au3LOm06GvCLUUgAwMMM69JYCyf0UaOIIB3IPqObZq/Wip2ZpmMBvwiFBAA8UIfGEVo8pZ96No9UflGx7n1rg2Z9tZeL88FjUUgAwENFhQbqnXt76c7Lmsntlv65bI8mzU/WmaJi09GASqOQAIAHC/Cz6anhHfTMzR3lb7e0ZFuGRsxdo7Scs6ajAZVCIQEALzC6Z1O9e99ligoN1K6MfA2dtUqr92WbjgVUGIUEALxEj+aR+mRKX3VuEqFTZ5361X/W6d+rDrKuBB6BQgIAXqRhRB29P763bu7WWCUut576dId+u2CrCp0lpqMBF0QhAQAvE+Rv13O3dtbjQ+Jlt1lamJyu215Zq4zcQtPRgPOikACAF7IsS/f0a6G37u6pusH+2pKeqyEzV2nj4RzT0YCfRCEBAC/Wt3WUFk/qp3axYco+XaRRr36rd9elmo4F/AiFBAC8XNP6wVo4oY9u6BgrZ4lb0z7cpsc/3i5Hsct0NKAMhQQAfEBIoJ9m395Nvx3YRpYlvf3tYY3593fKPl1kOhogiUICAD7DsixNvuoSvXZnD4UG+mndwRzdOHOVth/JNR0NoJAAgK+5Jj5GH0/qq5ZRITqaW6gRc9do0eYjpmPBx1FIAMAHtY4O1UeT+urKtg1UVOzSA+9t1jNLdqrExUnUYAaFBAB8VEQdf/3r15dq4oBWkqRXkg5o7BvrlXvWaTgZfBGFBAB8mN1m6XfXtdOs27uqjr9dSXuOa9jsVdqTmW86GnwMhQQAoCGdGum/E3qrcd06OnTirG6avVrLUjJMx4IPoZAAACRJCY0itHhyX13WMlJnHCUa9/ZGvbh8j1ysK0ENoJAAAMrUDw3U2/f00l19mkuSXly+V/e/s1Gni4rNBoPXo5AAAMrxt9v05xsT9OwtnRRgt2nZjkzdPGe1DmWfMR0NXoxCAgD4SSN7xOm98ZcpOixQezJP68ZZq5S057jpWPBSFBIAwHl1a1pPn0zpp65N6yqvsFh3vb5Orybtl9vNuhJULQoJAOCCYsKD9N64yzSyRxO53NJfl+zSb97frEJnielo8CIUEgDAzwr0s+vvIzrpiRsTZLdZ+njzUd3y8hodOVVgOhq8hOWuxHG3tLQ0LVmyRBERESooKNDYsWN/9Jz3339fLpdLBQUF6tWrlxISEiRJ27dv15dffqno6Ght2bJFjz32mMLDwyv0vnl5eYqIiFBubm6FXwMAqB5r95/QpPnJyjnjUFRogObc0V09W0SajoVaqDLf35UqJPfdd59effVVWZalr7/+WkeOHNHtt99e9nhSUpIOHz6sO++8U5I0YcIEzZ49WzabTTfffLMWLlwoy7K0fPlyffPNN3riiSeq/BcCAFS/tJyzGv/2Ru04lic/m6U/35igMZc1Mx0LtUxlvr8rPLLZtm2bnE6nLMuSJPXp00czZ84s95yXXnpJ/fr1K/u5QYMGWrp0qSQpMzOz7LWxsbEqKTn/7LGoqEh5eXnlbgCA2iMuMlgLJ/TRkE4NVexy67GPt2vah9vkKHaZjgYPVeFCsn79esXGxpb97O/vr9TUVBUXF5d7TsOGDct+btiwodavXy9Juuqqq/T000/L6XQqLS1NDz/88Hnf65lnnlFERETZLS4urlK/FACg+tUJsGvm6K76/XXtZFnSu+tSdftr3yorv9B0NHigCheSrKwsBQYGlrvPbrcrOzv7vM8JDAxURkbptRAee+wxRUVF6Z133tEHH3ygs2fPnve9pk2bptzc3LJbWlpahX8hAEDNsSxLEwa00n9+fanCgvy04fBJ3ThztbamnzIdDR6mwoUkOjpahYXlW29JSYmioqLO+xyHw6GYmBhJ0l133aV77rlHY8eO1SOPPKKbbrrpvPvYAwMDFR4eXu4GAKi9rmwXrUWT+qpVgxBl5BXqlpfX6sPkdNOx4EEqXEh69OhR7kiF0+lUXFyc/Pz8yu679NJLyz0nIyNDPXr00PHjx3Xo0CH5+/tLkuLj4+VyuXTixImq+B0AALVAywah+mhSX13TPlqOYpce+mCLnvp0h4pLWFeCn1fhQtKpUyfZbDY5HA5J0po1azR58mQlJiYqMTFRkvTggw9q2bJlZa85duyYBg8erMjISOXm5qqoqEiSVFhYqODg4HJHVwAAni88yF+v3tlDU65qLUn696qDuuv19Tp5xmE4GWq7Sm37TU9P14IFCxQZGanCwkKNHz9eU6dOlSTNmDFDkvT2229Lkk6dOqUBAwaoY8eOkqSVK1fqs88+U8eOHXXw4EGNHDlS7du3r9D7su0XADzPkm3H9NsFW3TWUaK4yDp67Vc91C6WP8N9SbWdh8QUCgkAeKZdGXm6760NSsspUHCAXc/d2lnXd2z48y+EV6iW85AAAFBZ7WLDtXhSP/VtXV9nHSWaMC9Zzy/bLZer1v9dGDWMQgIAqFb1QgL05tieuqdfC0nSjK/2adzbG5Rf6DScDLUJhQQAUO387DY9PiRez93aWQF+Ni3fmaWb5qzRgeOnTUdDLUEhAQDUmBHdm2jB+N6KDQ/SvqzTGjZ7tRJ3Z5mOhVqAQgIAqFGd4+pq8ZS+6t6snvILi3X3G+s1d+X+854sE76BQgIAqHHRYUGaf18vje4ZJ7db+vvnuzT1vc0qcJz/wqvwbhQSAIARgX52/fWmjnpqeAf52Sx9suWoRsxdo/ST57/WGbwXhQQAYIxlWbrzsmaad28v1Q8J0I5jebpx1mqt3c+lRXwNhQQAYFyvlvW1eEo/dWgcrpwzDo3593d6c80h1pX4EAoJAKBWaFy3jhaM76NhXRqpxOXW9MUp+v3CrSoqZl2JL6CQAABqjToBdr14Wxf94YZ2slnSBxvS9ejCbRwp8QEUEgBArWJZlsb1b6V//bqH7DZLH206onfXpZmOhWpGIQEA1EpXtYvRI4PaSpL+vDhF29JzDSdCdaKQAABqrXGXt9Q17WPkKHFpwryNyj3L9W+8FYUEAFBr2WyWnru1s+Ii6yj9ZIEe+mAzVwr2UhQSAECtFhHsr7l3dFeAn00rdmXplaQDpiOhGlBIAAC1XofGEXrixgRJ0j++2MWJ07wQhQQA4BFGXRqnm7s1lsstTXl3k7LyCk1HQhWikAAAPIJlWXp6eAe1jQlT9ukiTXl3k4pLXKZjoYpQSAAAHiM4wE9zxnRTSIBd3x3M0XNf7jEdCVWEQgIA8CitGoTq2Vs6S5LmrtyvL3dkGk6EqkAhAQB4nMGdGmps3+aSpIc/2KzUE2fNBsIvRiEBAHikade3V9emdZVXWKyJ8zeq0MlF+DwZhQQA4JEC/GyafXs31Qv21/YjeXry0x2mI+EXoJAAADxWo7p19OKorrIsaf53qfowOd10JFwkCgkAwKNd0aaBpl51iSTpjx9t1+6MfMOJcDEoJAAAjzf16kt0+SVRKnCWaMK8jTpdVGw6EiqJQgIA8Hh2m6UXb+uihhFBOnD8jH6/cKvcbi7C50koJAAAr1A/NFCzbu8mP5ulz7Ye05trDpmOhEqgkAAAvEb3ZvX0hxvaS5L+smSnklNPGk6EiqKQAAC8yti+zXVDx1g5S9yaPC9ZOWccpiOhAigkAACvYlmW/j6ik1pEhehobqEefH+zXC7Wk9R2FBIAgNcJC/LX3DHdFORvU9Ke45r51T7TkfAzKCQAAK/ULjZcfxneUZL04oo9+mbvccOJcCEUEgCA1xrRvYlG94yT2y098N5mHcstMB0J50EhAQB4telDE5TQKFw5ZxyaNC9ZzhKX6Uj4CRQSAIBXC/K3a84d3RQW5Kfk1FP629JdpiPhJ1BIAABer1n9ED13a2dJ0r9XHdTSbccMJ8L/RyEBAPiEgQmxGt+/pSTpkf9u1YHjpw0nwg9RSAAAPuORQW3Vs0WkThcVa+K8ZBU4SkxHwjkUEgCAz/Cz2zRrdFdFhQZqV0a+Hvt4OxfhqyUoJAAAnxIdHqQZo7vIZkkLk9P1wYY005EgCgkAwAf1aRWlhwe2lSQ9vihFKUdzDScChQQA4JMmXNFKV7WLlqPYpYnzkpVb4DQdyadRSAAAPslms/T8yM5qUq+ODp84q0cWbGE9iUEUEgCAz6obHKA5d3RTgN2mZTsy9do3B0xH8lkUEgCAT+vUpK7+NDRekvT3z3dr3cEcw4l8E4UEAODz7ujVVMO7NFKJy63J85N1PL/IdCSfQyEBAPg8y7L0l5s66pLoUGXlF2nqu5tU4mI9SU2ikAAAICkk0E9zx3RTcIBdaw+c0Atf7jEdyadQSAAAOKd1dJj+NqKTJGlW4j59tSvTcCLfQSEBAOAHbuzcSL/u3UyS9Jv3tygt56zhRL6BQgIAwP/zh8Ht1TmurnILnJo0P1lFxVyEr7pRSAAA+H8C/eyafXtX1Q3219b0XD396U7TkbwehQQAgJ/QpF6wXritiyTp7W8Pa9HmI2YDeTkKCQAA53Fl22hNuaq1JGnah9u0NzPfcCLvRSEBAOACHrymjfq2rq+zjhJNmJesM0XFpiN5JQoJAAAXYLdZemlUV8WEB2pf1mlN+3AbF+GrBhQSAAB+RlRooGbf3k12m6XFW47qnW8Pm47kdSgkAABUQI/mkZp2fTtJ0pOf7tDmtFNmA3kZCgkAABV0T78WGpQQI2eJW5PmJevkGYfpSF6DQgIAQAVZlqV/3NpZzeoH68ipAj30wWa5uAhflaCQAABQCeFB/pp7R3cF+tmUuPu45n6933Qkr0AhAQCgkuIbheup4R0kSc8t263V+7INJ/J8FBIAAC7CyB5xGtmjiVxu6YH3Nikjt9B0JI9GIQEA4CI9OayD2sWGKfu0Q1PeTZazxGU6kseikAAAcJGC/O2aO6a7wgL9tP7QSf3ji92mI3ksCgkAAL9Ai6gQ/ePWTpKkV5MO6PPtGYYTeaYaLyS5ubl6/vnntWfPnpp+awAAqsV1HRrqvstbSJIeWbBFh0+cMZzI8/hV5slpaWlasmSJIiIiVFBQoLFjx/7oOe+//75cLpcKCgrUq1cvJSQklD22YcMGPfPMM5o1a5YaNmz4y9MDAFBL/O66dtqUekobDp/U/e8k66OJfRTkbzcdy2NU6gjJk08+qXHjxmnUqFFq2bKl5s+fX+7xpKQkORwOjR49WnfffbdmzZoll6t0gc+hQ4d03333ac6cOZQRAIDX8bfbNOv2bqofEqCdx/I0fVGK6UgepcKFZNu2bXI6nbIsS5LUp08fzZw5s9xzXnrpJfXr16/s5wYNGmjp0qWSpAcffFB/+MMfFBMTUxW5AQCodWIjgjRjdFdZlvT+hjR9sCHNdCSPUeFCsn79esXGxpb97O/vr9TUVBUXF5d7zg+PfjRs2FDr16/XsWPHtGbNGg0ZMkTvv/++Ro0apWPHjp33vYqKipSXl1fuBgCAJ+jbOkoPXdNGkvT4x9u14yjfYRVR4UKSlZWlwMDAcvfZ7XZlZ2ef9zmBgYHKyMjQunXr1KNHD9WpU0e33Xabhg0bpunTp5/3vZ555hlFRESU3eLi4irzOwEAYNSkK1trQNsGKip2aeK8jcordJqOVOtVuJBER0ersLD8WehKSkoUFRV13uc4HA7FxMSosLBQkZGRZfd36dJF33333Xnfa9q0acrNzS27paVxyAsA4DlsNksvjOyixnXr6NCJs/r9f7fK7eYifBdS4ULSo0ePcsXA6XQqLi5Ofn7fb9S59NJLyz0nIyNDPXr0UNOmTZWZmVl2f3Fx8Y+OtvxQYGCgwsPDy90AAPAk9UICNPuObvK3W1q6PUP/XnXQdKRarcKFpFOnTrLZbHI4HJKkNWvWaPLkyUpMTFRiYqKk0oWry5YtK3vNsWPHNHjwYPXs2VPHjh3TiRMnJElbt27VkCFDqvL3AACg1ukSV1ePD4mXJP1t6S5tOJRjOFHtZbkrcQwpPT1dCxYsUGRkpAoLCzV+/HhNnTpVkjRjxgxJ0ttvvy1JOnXqlAYMGKCOHTtKKi0hr7/+ui677DLt3LlTjz76qIKCgir0vnl5eYqIiFBubi5HSwAAHsXtdmvqe5v1yZajig0P0qdT+ykq9PxTAm9Sme/vShUSUygkAABPdrqoWMNmrdL+42fUr3WU3ry7p+w2y3SsaleZ72+uZQMAQDULDfTT3DHdVcffrlX7svXSir2mI9U6FBIAAGpAm5gw/W1E6TKGmV/t1crdWYYT1S4UEgAAasiwLo015rKmcrulB9/frCOnCkxHqjUoJAAA1KDHh8SrU5MInTrr1MR5yXIUu0xHqhUoJAAA1KBAP7tm395NEXX8tSXtlP66ZKfpSLUChQQAgBoWFxms50d2liS9seaQPtly1HAi8ygkAAAYcHX7GE0c0EqS9OjCrdqXddpwIrMoJAAAGPLQtW3Uu2V9nXGUaOK8jTrrKDYdyRgKCQAAhvjZbXppdBdFhwVqT+Zp/fGj7T57ET4KCQAABkWHBWnm6K6y2yx9tOmI5q9LNR3JCAoJAACG9WpZX78b1FaS9MTiHdqWnms4Uc2jkAAAUAuM699S18bHyFHi0oR5G5V71mk6Uo2ikAAAUAtYlqV/3tpZTSODlX6yQA99sFkul++sJ6GQAABQS0TU8decO7opwM+mFbuy9ErSAdORagyFBACAWqRD4wg9eWOCJOkfX+zS2v0nDCeqGRQSAABqmdsujdOIbk3kcktT3t2krLxC05GqHYUEAIBaxrIsPT28g9rFhin7dJEmv7tJxSXefRE+CgkAALVQnQC75tzRTaGBflp3MEf/XLbHdKRqRSEBAKCWatkgVM/e0kmS9PLX+/XljkzDiaoPhQQAgFrsho4NdXffFpKkhz/YrNQTZw0nqh4UEgAAarlHr2+nbk3rKq+wWBPnb1Shs8R0pCpHIQEAoJYL8LNp1u3dFBkSoO1H8vTEJztMR6pyFBIAADxAo7p19OJtXWRZ0rvrUrVwY7rpSFWKQgIAgIfo36aBHrj6EknSHz/epl0ZeYYTVR0KCQAAHmTKVZfo8kuiVOh0aeI7yTpdVGw6UpWgkAAA4EHsNksvjeqqhhFBOpB9Rr9fuFVut+dfhI9CAgCAh4kMCdDsO7rJz2bps63H9OaaQ6Yj/WIUEgAAPFC3pvX0x8HtJUl/WbJTyaknDSf6ZSgkAAB4qLv6NNfgjg3lLHFr0rxk5ZxxmI500SgkAAB4KMuy9LcRHdUyKkTHcgv1wHubVOLyzPUkFBIAADxYWJC/5ozppiB/m77Zm61ZX+0zHemiUEgAAPBw7WLD9debOkqSXlyxR9/sPW44UeVRSAAA8AI3d2ui0T2byu2WHnhvs47lFpiOVCkUEgAAvMT0ofFKaBSunDMOTZqXLEexy3SkCqOQAADgJYL87Zp7R3eFBfkpOfWU/rZ0l+lIFUYhAQDAizStH6znR3aRJP1n9UEt2XbMbKAKopAAAOBlro2P0fgrWkqSfvffrTpw/LThRD+PQgIAgBd6ZGBb9WwRqdNFxZo4L1kFjhLTkS6IQgIAgBfys9s0a3RXRYUGaldGvh77eHutvggfhQQAAC8VHR6kmaO7ymZJC5PT9f76NNORzotCAgCAF+vdqr5+O6itJOlPi1O0/Uiu4UQ/jUICAICXu79/K13dLlqOYpcmzktWboHTdKQfoZAAAODlbDZLz4/soib16ig156x+u2BLrVtPQiEBAMAHRAT7a+4d3RVgt+nLHZl67ZsDpiOVQyEBAMBHdGwSoek3xkuS/v75bq07mGM40fcoJAAA+JDbezbVTV0bq8Tl1uT5yTqeX2Q6kiQKCQAAPsWyLP3lpg5qExOqrPwiTX13k4pLzF+Ej0ICAICPCQ7w05w7uiskwK61B07oheV7TEeikAAA4ItaR4fqbyM6SZJmJ+7XV7syjeahkAAA4KOGdm6ku/o0lyQ9/nGKnAZHN37G3hkAABj3hxva63RRsSYMaCV/u7njFBQSAAB8WICfTf+8tbPpGIxsAACAeRQSAABgHIUEAAAYRyEBAADGUUgAAIBxFBIAAGAchQQAABhHIQEAAMZRSAAAgHEUEgAAYByFBAAAGEchAQAAxlFIAACAcR5xtV+32y1JysvLM5wEAABU1P++t//3PX4hHlFI8vPzJUlxcXGGkwAAgMrKz89XRETEBZ9juStSWwxzuVw6evSowsLCZFlWlf678/LyFBcXp7S0NIWHh1fpvxvf43OuGXzONYPPuWbwOdec6vqs3W638vPz1ahRI9lsF14l4hFHSGw2m5o0aVKt7xEeHs5/8DWAz7lm8DnXDD7nmsHnXHOq47P+uSMj/8OiVgAAYByFBAAAGOfzhSQwMFDTp09XYGCg6Shejc+5ZvA51ww+55rB51xzasNn7RGLWgEAgHfz+SMkAADAPAoJAAAwjkICAACMo5AAAAC53W6lpqbqk08+MfL+Pl1I0tLS9Morr+i9997T66+/bjqOV1u+fLmGDBliOoZXW79+vYYOHapu3bpp9OjROn36tOlIXuvQoUMaOXKkunfvrv79+ysrK8t0JK9WWFioW265xXQMr7VhwwZFR0crLi5Offr0UXBwsJEcPl1InnzySY0bN06jRo1Sy5YtNX/+fNORvNKCBQu0adMmviCrkcPh0KJFi/TRRx8pOTlZYWFheuqpp0zH8lrr1q3Tu+++q40bN6pZs2batGmT6Uhebe7cudqwYYPpGF4rLy9PW7duVXp6utLT03X11VcbyeGzhWTbtm1yOp1l18bp06ePZs6caTiVd7ruuut06623mo7h1TIyMvTAAw/Iz6/0ahDDhg3Tzp07DafyXiNHjpTdbi/7m/ugQYNMR/Ja77//vgYPHmw6hlfLz89X/fr1Tcfw3UKyfv16xcbGlv3s7++v1NRUFRcXG0zlncLCwkxH8HpNmzZVgwYNyn5OSUnRwIEDDSbyftu3b9eUKVM0ffp0JSUlmY7jlZKTkxUaGqo2bdqYjuLV8vPz1b59ezVo0EATJkxQYWGhkRw+W0iysrJ+dEY6u92u7OxsQ4mAqpGTk6OUlBTdf//9pqN4tWbNmum1117Ts88+q9tvv12cY7Jq5ebmKjExkaMjNaB79+7asGGDDh48qPz8fP3lL38xksNnC0l0dPSPWmBJSYmioqIMJQJ+OafTqVmzZmnWrFll4xtUj/8d+Rs4cKAKCgp04sQJw4m8y5tvvqkVK1Zo+PDhGj58uLKysjR8+HCtWrXKdDSv0759e9WtW1ehoaF65ZVX9OWXXxrJ4bN/YvXo0UPLly8v+9npdCouLo4/xOGxXC6X5syZo4ceekihoaGm4/gMt9utgICAWjGD9yZTp07V1KlTy35u3ry5Pv74Y3OBfERISIhiYmKMvLfPHiHp1KmTbDabHA6HJGnNmjWaPHmy4VTAxXv22Wc1ZsyYsjLy1ltvqaioyHAq7+NwOMpt8124cKGmTJlStkAe8DQHDhwo++fExERdf/31RnL49MX10tPTtWDBAkVGRqqwsFDjx483HckrZWdna+7cuXr55Zf11ltvGdtS5s3efPNNPfroo2V/S3e5XMrJyVFGRobhZN7n4MGDGjVqlG655Ra1bNlSOTk5uueee2Sz+ezf72pE8+bNdejQIdMxvM7Zs2c1YsQINW/eXN27d5efn5/uuusuI1l8upAAAIDagUoPAACMo5AAAADjKCQAAMA4CgkAADCOQgIAAIyjkAAAAOMoJAAAwDgKCQAAMI5CAgAAjKOQAAAA4ygkAADAOAoJAAAwjkICAACM+z+Dh/0a+TkvGwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(res.index, res['rate'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be1afdfa",
   "metadata": {},
   "source": [
    "## 距离上次联系间隔天数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "3208d6e0",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.219814Z",
     "start_time": "2024-10-29T17:16:50.185911Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[]\n",
      "1\n"
     ]
    }
   ],
   "source": [
    "colname = '距离上次联系间隔天数'\n",
    "x = train[colname]\n",
    "bins = decision_tree_binning(x, y, max_leaf_node=5)\n",
    "print(bins)\n",
    "direction = check_monotonicity(x, y, bins)\n",
    "print(direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "2b320219",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:22:02.704017Z",
     "start_time": "2024-10-29T17:22:02.679711Z"
    }
   },
   "outputs": [],
   "source": [
    "train['距离上次联系间隔天数'] = train['距离上次联系间隔天数'].apply(lambda x: 0 if x == 999 else 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ccc5393",
   "metadata": {},
   "source": [
    "## 上次营销活动联系次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "5fcfafd6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.253195Z",
     "start_time": "2024-10-29T17:16:50.222701Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.5]\n",
      "1\n"
     ]
    }
   ],
   "source": [
    "colname = '上次营销活动联系次数'\n",
    "x = train[colname]\n",
    "bins = decision_tree_binning(x, y, max_leaf_node=6)\n",
    "print(bins)\n",
    "direction = check_monotonicity(x, y, bins)\n",
    "print(direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "bcef7ad6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.286602Z",
     "start_time": "2024-10-29T17:16:50.255156Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>上次营销活动联系次数</th>\n",
       "      <th>是否订阅</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>上次营销活动联系次数</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>35563</td>\n",
       "      <td>3141</td>\n",
       "      <td>0.088322</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5625</td>\n",
       "      <td>1499</td>\n",
       "      <td>0.266489</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            上次营销活动联系次数  是否订阅      rate\n",
       "上次营销活动联系次数                            \n",
       "0                35563  3141  0.088322\n",
       "1                 5625  1499  0.266489"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['上次营销活动联系次数'] = np.digitize(x, bins, right=True)\n",
    "res = train.groupby(by='上次营销活动联系次数').agg(func={'上次营销活动联系次数': 'count', '是否订阅': 'sum'})\n",
    "res['rate'] = res['是否订阅'] / res['上次营销活动联系次数']\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "de9af1e9",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.566894Z",
     "start_time": "2024-10-29T17:16:50.289558Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f035aa6c50>]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(res.index, res['rate'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45291aa8",
   "metadata": {},
   "source": [
    "## 就业变化率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "372a8701",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.600622Z",
     "start_time": "2024-10-29T17:16:50.571159Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-2.35000002 -0.65000001]\n",
      "-1\n"
     ]
    }
   ],
   "source": [
    "colname = '就业变化率'\n",
    "x = train[colname]\n",
    "bins = decision_tree_binning(x, y, max_leaf_node=3)\n",
    "print(bins)\n",
    "direction = check_monotonicity(x, y, bins)\n",
    "print(direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "1ace6e3a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.637557Z",
     "start_time": "2024-10-29T17:16:50.603454Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>就业变化率</th>\n",
       "      <th>是否订阅</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>就业变化率</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2906</td>\n",
       "      <td>1136</td>\n",
       "      <td>0.390915</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10592</td>\n",
       "      <td>2165</td>\n",
       "      <td>0.204400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>27690</td>\n",
       "      <td>1339</td>\n",
       "      <td>0.048357</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       就业变化率  是否订阅      rate\n",
       "就业变化率                       \n",
       "0       2906  1136  0.390915\n",
       "1      10592  2165  0.204400\n",
       "2      27690  1339  0.048357"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['就业变化率'] = np.digitize(x, bins, right=True)\n",
    "res = train.groupby(by='就业变化率').agg(func={'就业变化率': 'count', '是否订阅': 'sum'})\n",
    "res['rate'] = res['是否订阅'] / res['就业变化率']\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "7a98ae47",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.850200Z",
     "start_time": "2024-10-29T17:16:50.640324Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f034d1d930>]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiQAAAGdCAYAAAAi3mhQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFlklEQVR4nO3deXRTdeL+8fdN0qZ0C5S2rGUpolCgbJWlLOq4sSiIKAOICiqbVETnqzM4v3EcZ/gyX3UUKcimgDgiiisoIjpWtoK0olBZBAFpy1bK0pauaZLfH4wdOwqkSLlN+rzOuec0yf0kzz2Xe/Jwk9yP4fF4PIiIiIiYyGJ2ABEREREVEhERETGdComIiIiYToVERERETKdCIiIiIqZTIRERERHTqZCIiIiI6VRIRERExHQ2swN4w+12c/jwYcLCwjAMw+w4IiIi4gWPx0NBQQGNGzfGYjn/ORCfKCSHDx8mJibG7BgiIiJyEbKysmjatOl51/GJQhIWFgac3aDw8HCT04iIiIg38vPziYmJqXgfPx+fKCQ/fkwTHh6uQiIiIuJjvPm6hb7UKiIiIqar0hmSrKwsVq1ahcPhoLi4mDFjxpxz3bfffpvCwkLuvffeKo8VERGR2qVKZ0iefvppxo0bx/Dhw4mNjWXp0qW/uN6uXbt47rnn8Hg8VR4rIiIitY/XhSQjIwOn01nxOVBiYiLJyck/W6+goIA1a9bQr1+/Ko8VERGR2snrQpKWlkbDhg0rbgcEBJCZmUl5eXml9ebMmcPEiRMvauyPSktLyc/Pr7SIiIiI//K6kOTk5GC32yvdZ7Vayc3Nrbi9ePFihg4dSmBgYJXH/tT06dNxOBwVi65BIiIi4t+8/lJrdHQ03333XaX7XC4XkZGRAJSUlPDyyy/z/vvvA7B7926Cg4NJT0+nS5cu5x3736ZOncqjjz5acfvH3zGLiIiIf/K6kCQkJPDZZ59V3HY6ncTExGCznX2KoKAgNmzYUPH4U089RYsWLRg9ejTbt28/79j/Zrfbf3ZGRURERPyX1x/ZxMfHY7FYKCsrAyA1NZWkpCRSUlJISUm5qLEiIiIiUMXrkPz9739n9uzZREREUFJSwvjx45k8eTIA1113XZXHioiIiAAYnp9eLKSGys/Px+FwkJeXp0vHi4iI+IiqvH/X+kvH+0AfExER8Xu1upAUl7kYNm8TH24/bHYUERGRWs0nZvutLks2/UDaD6dI++EUu47k87sbr8JiufCMhCIiInJp1eozJA/0iWV831gAZqfsY+ySdPJLnCanEhERqX1qdSGxWgymDmjLjN92wm6z8K/dOdw2eyP7j58xO5qIiEitUqsLyY9u69yEtyck0sgRxP7jhQyevZGU73LMjiUiIlJrqJD8W4emDlYk9SaheT0KSsq5b3Eac9fu069wRERELgMVkp+ICrOzdGwPRnRrhscDf/94Nw8v+4biMpfZ0URERPyaCsl/CbRZmH57B/52W3tsFoMV2w5zx9xUDp0uNjuaiIiI31IhOYdRPZrz+gPdqR8SyI7D+QxK3sCWAyfNjiUiIuKXVEjOo3tsfT5I6kVco3BOFJYxcsFm/rn5oNmxRERE/I4KyQU0rRfMOxMTuSW+EeVuD//v/W954r0MysrdZkcTERHxGyokXqgTaCV5RGd+368NhgFLv8zkrpc3c7yg1OxoIiIifkGFxEuGYTDx2lYsvPdqwoJspP1wikGzNpCRnWd2NBEREZ+nQlJF17WJ5v1JvYiNCuFIXgl3zE3lg28OmR1LRETEp6mQXIRWUaG8P6kXv2kTTWm5m4eXfcP0VbtwuXURNRERkYuhQnKRwoMCWHBPAg9e2wqAeev2c9/iNPKKNDmfiIhIVamQ/ApWi8Hj/dqQPKIzQQEW1u45zm0vbeT7nAKzo4mIiPgUFZJL4NaOjXlnYiJN6tbhQG4ht81O5bOdx8yOJSIi4jNUSC6Rdo0drEjqRbeWEZwpLWfsa+nM+nyvJucTERHxggrJJVQ/1M7rD3Tnnp7N8XjguTV7SFr6NUVl5WZHExERqdFUSC6xAKuFpwe3Z/rtHQiwGnyUcYTbX0ol62SR2dFERERqLBWSajKiWzPeGNuDyFA7u48WMGjWBlL35ZodS0REpEZSIalGCS0iWPlQL+KbOjhV5OTuV7aweOMBfa9ERETkv6iQVLNGjjq8Nb4nQzo3weX28NTKnfz+ne2UlrvMjiYiIlJjqJBcBkEBVp4f1pE/DmiLxYC30rMZMX8zOfklZkcTERGpEVRILhPDMBjbN5bFY7oRHmRja+Zpbp21gW+yTpsdTURExHQqJJdZ3yujWJHUm9bRoRzLL2XYvE2881W22bFERERMpUJighaRIbw3qRc3xjWgrNzN75Zv468f7qTc5TY7moiIiClUSEwSarcxb1RXJl/fGoBXNhxg9KI0TheVmZxMRETk8lMhMZHFYvDojVcy564uBAda2fB9LoNmbeS7o5qcT0REahcVkhqgf4dGvDMxkab16pB5soghL21k9bdHzY4lIiJy2aiQ1BBtG4WzIqk3ia3qU1TmYsI/v2LGZ3twu3URNRER8X8qJDVIREggS+7rxpheLQCY8dleJvzzK86UanI+ERHxbyokNYzNauHPt7bjmTviCbRaWLPzGLe/tJGDJwrNjiYiIlJtVEhqqGEJMSwb34PoMDt7jp1h0KyNbNiryflERMQ/qZDUYF2a1WPlQ73pFFOXvGIn9yz8kpfX79fkfCIi4ndUSGq4BuFBLBvXg6FdmuL2wN8+2sXvlm+jxKnJ+URExH9c9kLi8XjIzMxk5cqVl/ulfVZQgJXn7oznyVvisFoM3t16iN/O38zRPE3OJyIi/qFKhSQrK4t58+axbNkyFi1a9IvrzJgxg5tvvpnY2Fjmzp1bcX96ejrR0dHExMSQmJhIcHDwr0teyxiGwX29W7Lkvm7UDQ5gW9bZyfm+OnjK7GgiIiK/muGpwhcSxo4dy/z58zEMg7Vr13Lo0CFGjhxZ8fiuXbsoKyujY8eO7Nu3j1GjRrFp0yYAPv/8c+Li4mjYsGGVQ+bn5+NwOMjLyyM8PLzK4/1N5okixi5J57tjBQRaLfzttvYMuzrG7FgiIiKVVOX92+szJBkZGTidTgzDACAxMZHk5ORK67Rt25aOHTsCcObMGRYuXFjxWEFBAfXr1/d6I+TcmtUP5t0HE+nXriFlLjePv7Odp1bswKnJ+URExEd5XUjS0tIqnd0ICAggMzOT8vLKF+1yuVzMnz+fcePG8eyzz1Y8XlBQQNu2bYmKimLixImUlJz7+w+lpaXk5+dXWqSyELuNl+7qwqM3XgnA4tQfuOeVLZws1OR8IiLie7wuJDk5Odjt9kr3Wa1WcnMrXxvDMAxGjRpFamoqe/furfiuSdeuXUlPT+fAgQMUFBQwbdq0c77W9OnTcTgcFUtMjD6O+CUWi8Hk61sz/+6uhARa2bT/BINmbWDnYRU4ERHxLV4Xkujo6J+d1XC5XERGRlZ+QouF4OBgrFYrw4YNY9u2bcDZj3Pq1q1LaGgo8+bN49NPPz3na02dOpW8vLyKJSsrqyrbVOvc1K4h703qRfP6wWSfKmbonFQ+2n7E7FgiIiJe87qQJCQkVCoGTqeTmJgYbDbbOccUFRURGxv7s/tDQkJo0KDBOcfZ7XbCw8MrLXJ+VzYI44NJvejTOpJip4tJS7fyjzXfaXI+ERHxCV4Xkvj4eCwWC2VlZ7+jkJqaSlJSEikpKaSkpABw6NChivVdLhcpKSmMHj0agP3791c8lpKSQv/+/S9FfvmJusGBLBp9NWP7tAQg+fPvGfdaOgUlTpOTiYiInF+VfvabnZ3N8uXLiYiIoKSkhPHjxzN58mQAZs6cyZNPPsmOHTsYMWIE2dnZDBw4kNatW1NUVMTQoUNp0aIFXbt2xWazVRQVb+hnv1X33tfZ/P6dDMrK3VwRHcqCexJoGRlidiwREalFqvL+XaVCYhYVkouzLes041/7iqP5JYQH2Zg5ojPXXhVtdiwREaklquU6JOJ7OsbUZcVDvejavB75JeXctziNeWv3aXI+ERGpcVRI/Fx0WBBLx3Zn+NUxuD0w/ePdTHnzG03OJyIiNYoKSS1gt1mZfnsH/jq4HTaLwQffHOaOuakcPl1sdjQRERFAhaTWMAyDu3u24LX7uxMREsi3h/IZNGsDaT+cNDuaiIiICklt07NVfVYk9aJto3Byz5QxcsFmln6ZaXYsERGp5VRIaqGm9YJ5Z2JPBsY3wuny8MR7GfzxvbM/ERYRETGDCkktFRxoY9aIzjx281UYBrz+ZSajXv6S3DOlZkcTEZFaSIWkFjMMg0nXXcEr9yYQZrex5YeTDErewLeH8syOJiIitYwKifCbNg14b1IvYiNDOJxXwh1zU1mx7bDZsUREpBZRIREArogO5b1Jvbj2qihKnG4mv/E1f/94Ny5NziciIpeBColUcNQJ4JV7r2bita0AmLt2H/e/mkZesSbnExGR6qVCIpVYLQa/79eGF4d3IijAwhffHWfI7I18n3PG7GgiIuLHVEjkFw3u1IS3JyTS2BHE/txChszeyL92HTM7loiI+CkVEjmn9k0crHioN91aRFBQWs4DS9KZnfK9JucTEZFLToVEzisy1M4/H+jOqB7N8Hjg2U++I+mNrykqKzc7moiI+BEVErmgQJuFv93Wgf8d0oEAq8FH248wdM4msk4WmR1NRET8hAqJeG1k92YsHduDyNBAdh3JZ/DsjWzef8LsWCIi4gdUSKRKrm4RwYqk3rRvEs7JwjJGvfwlSzb9oO+ViIjIr6JCIlXWuG4d3p6QyOBOjSl3e3jygx1MfTeD0nKX2dFERMRHqZDIRQkKsDLjt514YkAbLAYsS8ti5IIvySkoMTuaiIj4IBUSuWiGYTCubysWjr6asCAbXx08xaDkjWzLOm12NBER8TEqJPKrXXtVNCuSenNFdChH80u4c94m3t2abXYsERHxISokckm0jAzhvQcTuaFtNGXlbh59axvTPtpJucttdjQREfEBKiRyyYQFBTD/7gQe+s0VACxYf4Axi9PIK9LkfCIicn4qJHJJWSwGv7vpKl66qwt1Aqys35vLoNkb2HOswOxoIiJSg6mQSLUY0KER70xMpGm9Ohw8UcSQ2RtZs+Oo2bFERKSGUiGRahPXOJwVSb3pGVufwjIX4177ihc/24vbrYuoiYhIZSokUq0iQgJZcn83Rie2AOCFz/bw4OtbKSzV5HwiIvIfKiRS7QKsFp4a1I5nhsYTaLWwesdRhs5JJfOEJucTEZGzVEjkshl2dQxvjOtBVJid3UcLGDR7Axu/zzU7loiI1AAqJHJZdW1ej5VJvenY1MHpIif3LNzCwg0HNDmfiEgtp0Iil11DRxBvju/J7V2a4HJ7ePrDnTz29nZKnJqcT0SktlIhEVMEBVj5x50d+dMtcVgMePurbIbP38yxfE3OJyJSG6mQiGkMw+D+3i1Zcl93HHUC+CbrNLcmb2Br5imzo4mIyGWmQiKm6906khVJvbiyQSg5BaUMn7eZt9KzzI4lIiKXkQqJ1AjN64fw7oO9uLldA8pcbh5/ezt/WblDk/OJiNQSKiRSY4Tabcy5qytTbmgNwKKNP3DPwi2cKiwzOZmIiFQ3FRKpUSwWgyk3XMm8u7sSEmgldd8JBs3ewO6j+WZHExGRaqRCIjXSze0a8u6DvWgWEUzWyWJufymVjzOOmB1LRESqSZUKSVZWFvPmzWPZsmUsWrToF9eZMWMGN998M7GxscydO7dKY0V+6qqGYaxI6kXvKyIpKnMx8fWtPL/mO03OJyLihwxPFS6ROXbsWObPn49hGKxdu5ZDhw4xcuTIisd37dpFWVkZHTt2ZN++fYwaNYpNmzZ5NfZ88vPzcTgc5OXlER4eXsVNFF9X7nIz/ePdvLLhAAA3tG3AC7/tSFhQgMnJRETkfKry/u31GZKMjAycTieGYQCQmJhIcnJypXXatm1Lx44dAThz5gwLFy70eqzIudisFv50Sxz/uLMjgTYLn+06xu0vpfJDbqHZ0URE5BLxupCkpaXRsGHDitsBAQFkZmZSXl55GnmXy8X8+fMZN24czz77LOXl5V6P/VFpaSn5+fmVFpGhXZvy1vieNAi3szfnDINmbWDtnuNmxxIRkUvA60KSk5OD3W6vdJ/VaiU3t/JsrYZhMGrUKFJTU9m7dy+LFi3yeuyPpk+fjsPhqFhiYmK8jSl+rlNMXVYm9aZLs7rkl5QzZtEWFqzbr8n5RER8nNeFJDo6mpKSyvOMuFwuIiMjKz+hxUJwcDBWq5Vhw4axbds2r8f+aOrUqeTl5VUsWVm6aqf8R3R4EG+M68FvE2Jwe2Daql08+tY2Tc4nIuLDvC4kCQkJlYqB0+kkJiYGm812zjFFRUXExsZWeazdbic8PLzSIvJTdpuVvw/twF8GtcNqMXjv60PcOXcTR/KKzY4mIiIXwetCEh8fj8Vioazs7FUzU1NTSUpKIiUlhZSUFAAOHTpUsb7L5SIlJYXRo0efc6zIr2EYBvcmtuC1+7tRLziAjEN53Jq8kfQfTpodTUREqqhKP/vNzs5m+fLlREREUFJSwvjx45k8eTIAM2fO5Mknn2THjh2MGDGC7OxsBg4cSOvWrc851lv62a9cSNbJIsYuSWf30QICrAZPD27PiG7NzI4lIlKrVeX9u0qFxCwqJOKNorJyHlu+nY/+fUXXu3s058lb4wiw6oLEIiJmqJbrkIjUdMGBNmaN7MxjN1+FYcBrmw9y18tfcuJMqdnRRETkAlRIxK8YhsGk665gwd0JhNptbDlwkkGzNrLjcJ7Z0URE5DxUSMQv3RDXgPcnJdIyMoRDp4sZOieVldsOmx1LRETOQYVE/NYV0WG8P6kX11wZRYnTzUNvfM0zq3fj0uR8IiI1jgqJ+DVHnQAWjr6a8dfEAvDSF/t44NU08kucJicTEZGfUiERv2e1GEzt35YXh3fCbrOQ8t1xbpu9kX3Hz5gdTURE/k2FRGqNwZ2a8PaERBo5gth/vJDbZm0kZXeO2bFERAQVEqllOjR1sCKpN1e3qEdBaTn3vZrGnC/2aXI+ERGTqZBIrRMVZuf1B3owsnszPB74v9W7mbzsG4rLNDmfiIhZVEikVgq0WfjfIR34223tsVkMVm47zB1zUzl0WpPziYiYQYVEarVRPZqzdGwP6ocEsuNwPoOSN/Dl/hNmxxIRqXVUSKTW69YyghUP9aZ9k3BOFJZx18tf8trmg2bHEhGpVVRIRIAmdeuwfHwigzo2ptzt4U/vf8vUdzMoK3ebHU1EpFZQIRH5tzqBVl4c3ok/9G+DYcAbWzIZuWAzxws0OZ+ISHVTIRH5CcMwmHBNKxaOvpqwIBvpB08xaNYGtmefNjuaiIhfUyER+QXXXRXNB5N60SoqhCN5Jdw5dxPvf33I7FgiIn5LhUTkHGKjQnlvUi9+0yaa0nI3U978hv9dtUuT84mIVAMVEpHzCA8KYME9CUy6rhUA89ftZ8ziNPKKNDmfiMilpEIicgFWi8FjN7dh1sjO1Amwsm7PcQbP3sDeYwVmRxMR8RsqJCJeuiW+MW9P7EmTunX44UQRQ15K5bOdx8yOJSLiF1RIRKqgXWMHK5J60SM2gjOl5Yx9LZ3kf+3V5HwiIr+SColIFdUPtfPa/d25t2dzPB74x6d7mLR0K4Wl5WZHExHxWSokIhchwGrhL4Pb8/fbOxBgNViVcZShc1LJOllkdjQREZ+kQiLyKwzv1oxl43oQGWpn99ECBs3aQOr3uWbHEhHxOSokIr9S1+YRrHyoF/FNHZwqcnL3wi0s3nhA3ysREakCFRKRS6CRow5vje/J7Z2b4HJ7eGrlTn7/znZKy11mRxMR8QkqJCKXSFCAlX8M68j/G9gWiwFvpWczfP5mcvJLzI4mIlLjqZCIXEKGYfBAn1heva8bjjoBfJ15mltnbeCbrNNmRxMRqdFUSESqQZ/WUXwwqReto0M5ll/KsHmbePurbLNjiYjUWCokItWkRWQI703qxY1xDSgrd/M/y7fx9MqdlLvcZkcTEalxVEhEqlGo3ca8UV2ZfH1rABZuPMC9i7ZwqrDM5GQiIjWLColINbNYDB698UrmjupCcKCVjd+fYPDsjXx3VJPziYj8SIVE5DLp174R7z6YSExEHTJPFjHkpY2s/vaI2bFERGoEFRKRy6hNw3BWTOpNryvqU1TmYsI/t/LCp3twu3URNRGp3VRIRC6zeiGBvDqmG/f1agnAi//ay4R/fsUZTc4nIrWYComICWxWC0/eGsezd8QTaLWwZucxbn9pIwdPFJodTUTEFCokIia6MyGGN8f3IDrMzp5jZxg0ayPr9x43O5aIyGWnQiJiss7N6rHyod50iqlLXrGTexdu4eX1+zU5n4jUKpe9kHg8HjIzM1m5cuXlfmmRGqtBeBDLxvXgzq5NcXvgbx/t4ndvbaPEqcn5RKR2qFIhycrKYt68eSxbtoxFixb97HG3283jjz/OddddR3x8fKXSkZ6eTnR0NDExMSQmJhIcHPzr04v4kaAAK8/cEc9Tt8ZhtRi8+/UhfjtvE0fzNDmfiPg/w1OF88Jjx45l/vz5GIbB2rVrOXToECNHjqx4fMmSJcTHx9OpUyf27t1LYmIiu3fvpn79+nz++efExcXRsGHDKofMz8/H4XCQl5dHeHh4lceL+JrU73N5cOlWThc5iQqzM3dUF7o2jzA7lohIlVTl/dvrMyQZGRk4nU4MwwAgMTGR5OTkSuvExcXRqVMnAFq3bk2LFi04ePAgAAUFBdSvX78q2yFSayVeEcnKpN60aRjG8YJShs/fzJtpmWbHEhGpNl4XkrS0tEpnNwICAsjMzKS8/D/XTkhISKj4u7S0lJKSEuLi4oCzhaRt27ZERUUxceJESkrOfRq6tLSU/Pz8SotIbRMTEcw7ExPp374hTpeH37+TwZ8/+BanJucTET/kdSHJycnBbrdXus9qtZKbm/uL68+aNYvnn3+eoKAgALp27Up6ejoHDhygoKCAadOmnfO1pk+fjsPhqFhiYmK8jSniV0LsNl66qwu/u/FKAF7ddJC7X/mSk5qcT0T8jNeFJDo6+mdnNVwuF5GRkT9bd+3atcTGxnLjjTdW3Ne2bVvq1q1LaGgo8+bN49NPPz3na02dOpW8vLyKJSsry9uYIn7HMAweur41C+5JINRuY/P+k9yavIGdh3XmUET8h9eFJCEhoVIxcDqdxMTEYLPZKq2Xnp5OYWEhQ4YMOedzhYSE0KBBg3M+brfbCQ8Pr7SI1HY3xjXgvQcTaVE/mEOnixk6J5WPtmtyPhHxD14Xkvj4eCwWC2VlZ08Vp6amkpSUREpKCikpKcDZL77u3LmTAQMGAGdLy+LFiwHYv39/xXOlpKTQv3//S7UNIrVG6wZhfDCpN31aR1LsdDFp6Vae++Q7Tc4nIj6vSj/7zc7OZvny5URERFBSUsL48eOZPHkyAM8++yxdunSp+BUOwIkTJ3jiiSe4//77GTp0KC1atKBr167YbDZGjx7tdUj97FekMpfbwzOrdzNv3dmif32baF4Y3onwoACTk4mI/EdV3r+rVEjMokIi8sve//oQv39nO6XlblpFhbDgngRio0LNjiUiAlTTdUhEpOa5rXMTlk/oSSNHEPuOFzJ49ka++C7H7FgiIlWmQiLi4+Kb1uWDpF4kNK9HQUk5YxanMXftPk3OJyI+RYVExA9EhwWxdGwPRnSLweOBv3+8m4eXfUNxmSbnExHfoEIi4icCbRb+d0gH/npbe2wWgxXbDnPnvFQOnS42O5qIyAWpkIj4EcMwuLtHc15/oDsRIYF8eyifwbM2sOXASbOjiYiclwqJiB/qHlufFUm9iGsUTu6ZMkYu2MzrXx40O5aIyDmpkIj4qab1zk7Od0t8I8rdHv743rf88b0Myso1OZ+I1DwqJCJ+rE6gleQRnXm831UYBrz+ZSZ3vbyZ3DOlZkcTEalEhUTEzxmGwYPXXsHCe68mzG4j7YdTDErewLeH8syOJiJSQYVEpJa4rk007yf1IjYqhMN5JQydk8oH3xwyO5aICKBCIlKrtIoK5f1JvbjuqihKy908vOwbpn+8C5cm5xMRk6mQiNQy4UEBvHzv1Tx4bSsA5q3dz32L08grdpqcTERqMxUSkVrIajF4vF8bkkd0JijAwto9x7lt9ka+zykwO5qI1FIqJCK12K0dG/P2hESa1K3DgdxCbpudyr92HTM7lojUQiokIrVc+yYOViT1olvLCM6UlvPAknRmp3yvyflE5LJSIRER6ofaef2B7tzdozkeDzz7yXckLf2aorJys6OJSC2hQiIiAARYLfz1tvZMv70DAVaDjzKOMHTOJrJOFpkdTURqARUSEalkRLdmvDG2B5GhdnYdyWfQrA1s2nfC7Fgi4udUSETkZxJaRLAiqRcdmjg4VeRk1Ctf8mrqD/peiYhUGxUSEflFjevWYfmEngzp3ASX28OfV+zgD+9kUFruMjuaiPghFRIROaegACvPD+vIHwe0xWLAm+lZjJi/mZz8ErOjiYifUSERkfMyDIOxfWNZNKYb4UE2tmaeZtCsjWzLOm12NBHxIyokIuKVa66MYkVSb66IDuVofgl3ztvEO19lmx1LRPyEComIeK1FZAjvPZjIDW0bUFbu5nfLt/G3D3dS7nKbHU1EfJwKiYhUSVhQAPPv7srk31wBwMsbDjBmcRqni8pMTiYivkyFRESqzGIxePSmq5hzVxeCA62s35vLoFkb2XNMk/OJyMVRIRGRi9a/QyPemZhI03p1yDxZxJDZG/lkx1GzY4mID1IhEZFfpW2jcFYk9aZnbH0Ky1yMf+0rXvxsL263LqImIt5TIRGRXy0iJJAl93djdGILAF74bA8Pvr6VwlJNzici3lEhEZFLIsBq4alB7XjmjngCrRZW7zjK7S+lknlCk/OJyIWpkIjIJTUsIYZl43sQHWbnu2MFDJq9gY3f55odS0RqOBUSEbnkujSrx8qHetMxpi6ni5zcs3ALr2w4oMn5ROScVEhEpFo0CA/izXE9GNqlKS63h79+uJP/Wb6dEqcm5xORn1MhEZFqExRg5bk743nyljisFoN3tmbz2/mbOabJ+UTkv6iQiEi1MgyD+3q3ZMl93agbHMC2rNPcmryBrZmnzI4mIjWIComIXBa9rohkxaTeXNUgjJyCUobP28xb6VlmxxKRGkKFREQum2b1g3n3wUT6tWtImcvN429v56kVO3Bqcj6RWk+FREQuqxC7jZfu6sKjN14JwOLUH7jnlS36XolILadCIiKXncViMPn61sy7uyshgVY27T/BTS+s44NvDumnwSK1lOGpwtGflZXFqlWrcDgcFBcXM2bMmEqPu91u/vCHP5CWlsaJEyeYNm0at956q1djzyc/Px+Hw0FeXh7h4eFejxORmu/7nDM8+tY3bM/OA6B/+4b87bb21A+1m5xMRH6tqrx/V6mQjB07lvnz52MYBmvXruXQoUOMHDmy4vElS5YQHx9Pp06d2Lt3L4mJiezevZv69etfcOyl2iAR8T3lLjdzvtjHi//aS7nbQ/2QQKYNaU+/9o3MjiYiv0JV3r+9/sgmIyMDp9OJYRgAJCYmkpycXGmduLg4OnXqBEDr1q1p0aIFBw8e9GqsiNReNquFh65vzQdJvWjTMIwThWVM+OdWpiz7mrwip9nxROQy8LqQpKWl0bBhw4rbAQEBZGZmUl7+n9k8ExISKv4uLS2lpKSEuLg4r8b+VGlpKfn5+ZUWEfF/7Ro7+CCpF5Oua4XFgPe/OcxNM9aS8l2O2dFEpJp5XUhycnKw2yt/pmu1WsnN/eVJs2bNmsXzzz9PUFBQlcdOnz4dh8NRscTExHgbU0R8nN1m5bGb2/DOxERiI0M4ll/KmEVpTH13O2dKf/k/MSLi+7wuJNHR0ZSUVP5ZnsvlIjIy8mfrrl27ltjYWG688cYqjwWYOnUqeXl5FUtWli6eJFLbdG5Wj48m9+G+Xi0BeGNLFv1mrGPTvhMmJxOR6uB1IUlISKhUDJxOJzExMdhstkrrpaenU1hYyJAhQ6o89kd2u53w8PBKi4jUPnUCrTx5axxvjO1B03p1yD5VzIgFm3lqxQ6KyzRJn4g/8bqQxMfHY7FYKCsrAyA1NZWkpCRSUlJISUkBzn7xdefOnQwYMAA4WzwWL158zrEiIt7o2ao+q6f0ZWT3ZsDZi6kNmLmerw5qPhwRf1Gln/1mZ2ezfPlyIiIiKCkpYfz48UyePBmAZ599li5dulT8kgbgxIkTPPHEEzz00EO/ONZb+tmviPxo7Z7j/P7t7RzNL8FiwPhrWjHlhtbYbVazo4nIf6m265CYRYVERH4qr9jJX1bu4N2thwC4qkEY/xjWkfZNHCYnE5GfqpbrkIiI1BSOOgE8P6wT8+7uSmRoIN8dK+C22Rt58bO9mqhPxEepkIiIz7q5XUM+mdKX/u0bUu728MJne7j9pVT2HCswO5qIVJEKiYj4tPqhdl66qwsvDu+Eo04AGYfyuGXmBuat3YfLXeM/kRaRf1MhERGfZxgGgzs1Yc0jfflNm2jKXG6mf7ybYfM28UNuodnxRMQLKiQi4jcahAfxyr0JPDM0nlC7ja8OnqL/i+tZsukH3DpbIlKjqZCIiF8xDINhV8ewekofElvVp9jp4skPdnD3wi85dLrY7Hgicg4qJCLil5rWC+af93fnL4PaERRgYeP3J7j5hXW8lZaFD1ztQKTWUSEREb9lsRjcm9iCjx/uS9fm9ThTWs7j72zn/lfTyckvufATiMhlo0IiIn6vZWQIb43vydT+bQi0Wvh8dw43vrCOFdsO62yJSA2hQiIitYLVYjD+mlZ8OLk3HZo4yCt2MvmNr0la+jUnC8vMjidS66mQiEitcmWDMN59MJFHbrgSm8Xgo4wj3PTCWtbsOGp2NJFaTYVERGqdAKuFh29ozfuTenFlg1Byz5Qx7rWvePStb8grdpodT6RWUiERkVqrfRMHKx/qzcRrW2Ex4N2th7j5hXWs3XPc7GgitY4KiYjUanabld/3a8PyCYm0jAzhaH4J9y7cwhPvZXCmtNzseCK1hgqJiAjQtXk9Vk3uw+jEFgAs/TKT/i+uY/P+E+YGE6klVEhERP6tTqCVpwa1Y+nY7jSpW4esk8WMWLCZp1fupMTpMjueiF9TIRER+S+JrSJZPaUPI7rF4PHAwo0HGDBzPV9nnjI7mojfUiEREfkFYUEBTL89nkVjriY6zM7+44UMnZPKs5/sprRcZ0tELjUVEhGR87juqmjWPNKX2zo1xu2B2Sn7GDxrIzsP55sdTcSvqJCIiFxA3eBAZgzvzJy7uhAREsjuowUMnr2BWZ/vpdzlNjueiF9QIRER8VL/Do1Y80hf+rVriNPl4bk1exg6J5XvcwrMjibi81RIRESqIDLUzpxRXZjx206EB9nYlp3HgJkbWLBuPy63JuoTuVgqJCIiVWQYBrd1bsKaR67h2quiKCt3M23VLobP38TBE4VmxxPxSSokIiIXqaEjiEWjr+bvt3cgJNBK2g+n6DdjPa9tPojHo7MlIlWhQiIi8isYhsHwbs1YPaUvPWIjKHa6+NP733LPwi0cPl1sdjwRn6FCIiJyCcREBLP0gR78+dY4ggIsrN+by80vrGN5epbOloh4QYVEROQSsVgMxvRqyarJfejcrC4FpeU89vZ2xi5JJ6egxOx4IjWaComIyCUWGxXK2xMS+X2/NgRaLXy2K4ebXljHh9sPmx1NpMZSIRERqQZWi8HEa1ux4qFetGsczukiJ0lLvyZp6VZOFZaZHU+kxlEhERGpRm0ahvPeg72YfH1rrBaDD7cf4cYX1vHZzmNmRxOpUVRIRESqWaDNwqM3Xsl7DybSOjqU3DOlPLAknf9Zvo38EqfZ8URqBBUSEZHLJL5pXVY+1JvxfWMxDHj7q2xufmEd6/ceNzuaiOlUSERELqOgACtTB7Rl+fietKgfzJG8Eu5+ZQv/7/0MCkvLzY4nYhoVEhEREyS0iGDVw324t2dzAP65OZP+L65ny4GTJicTMYcKiYiISYIDbfxlcHtef6A7TerWIfNkEb+dv4lpH+2kxOkyO57IZaVCIiJisl5XRLJ6Sh9+mxCDxwML1h9g4Mz1bMs6bXY0kctGhUREpAYICwrg/+6IZ+HoBKLC7Ow7Xsjtc1L5x5rvKCt3mx1PpNqpkIiI1CC/adOANVP6MqhjY1xuD8mff8/g2RvZdSTf7Ggi1eqyFxKPx0NmZiYrV6683C8tIuIT6oUEMnNEZ2aP7EK94AB2Hcln0KwNzE75nnKXzpaIf6pSIcnKymLevHksW7aMRYsW/eI6paWlDB48mC+++KLS/enp6URHRxMTE0NiYiLBwcEXHVpEpDYYGN+INY9cw41xDXC6PDz7yXcMnbuJ73POmB1N5JKrUiF5+umnGTduHMOHDyc2NpalS5dWevzw4cM8//zzlJaW/mxsfn4+27dvJzs7m+zsbK6//vpfl1xEpBaICrMz/+6uPD+sI2FBNrZlnWbgzPW8vH4/brfH7Hgil4zXhSQjIwOn04lhGAAkJiaSnJxcaZ2wsDCmTp1Kw4YNfza+oKCA+vXr/8q4IiK1j2EY3N6lKWse6Uuf1pGUlrv520e7GL5gM5knisyOJ3JJeF1I0tLSKhWNgIAAMjMzKS//z5UFw8LCzjm+oKCAtm3bEhUVxcSJEykpKTnnuqWlpeTn51daRERqu0aOOiy5rxvThrQnONDKlgMn6ffiOl7/8iAej86WiG/zupDk5ORgt9sr3We1WsnNzfVqfNeuXUlPT+fAgQMUFBQwbdq0c647ffp0HA5HxRITE+NtTBERv2YYBnd1b87qh/vSrWUERWUu/vjet9yzcAtH8orNjidy0bwuJNHR0T87q+FyuYiMjPRqfNu2balbty6hoaHMmzePTz/99JzrTp06lby8vIolKyvL25giIrVCs/rBLBvbgz/dEofdZmH93lxuemEd73yVrbMl4pO8LiQJCQmVioHT6SQmJgabzVblFw0JCaFBgwbnfNxutxMeHl5pERGRyiwWg/t7t2TVw33oFFOXgpJyfrd8G+Ne+4rjBT//cYFITeZ1IYmPj8disVBWVgZAamoqSUlJpKSkkJKScsHx+/fvr/g7JSWF/v37X0RcERH5b62iQnl7Qk8eu/kqAqwGn+48xk0vrGVVxhGzo4l4rUqnN/7+978ze/ZsIiIiKCkpYfz48UyePBmA6667DoB169aRnp6Ow+GgTZs2NGzYkKKiIiZNmkSLFi3o2rUrNpuNCRMmXPqtERGppWxWC5Ouu4LftInm0be2setIPg++vpVBHRvz9OB21A0ONDuiyHkZHh/4sDE/Px+Hw0FeXp4+vhERuYCycjfJn+/lpS/24XJ7iAqz839DO/CbNuf+qFykOlTl/Vtz2YiI+JlAm4Xf3XQV705MpFVUCMcLSrlvcTqPv72NghKn2fFEfpEKiYiIn+oYU5ePJvdhbJ+WGAa8lZ5Nvxnr2fi9d5drELmcVEhERPxYUICVPw6M481xPWkWEcyh08Xc9fKXPPnBtxSVlV/4CUQuExUSEZFaoFvLCD5+uA+jejQDYMmmg/R/cT3pP5w0OZnIWSokIiK1RIjdxt9u68Br93ejkSOIgyeKuHPeJqav2kWJ02V2PKnlVEhERGqZPq2jWD2lL3d0bYrHA/PW7efW5A1szz5tdjSpxVRIRERqIUedAJ67syML7kkgMtTO3pwzDHkplec/3UNZudvseFILqZCIiNRiN8Y14NNH+nJLfCNcbg8z/7WXIS9tZPdRzbIul5cKiYhILVcvJJBZI7uQPKIzdYMD2HE4n0HJG5nz7wuriVwOKiQiIgLArR0bs+aRvtzQNpoyl5v/W72bO+amsv/4GbOjSS2gQiIiIhWiw4JYcE8Cz93ZkTC7ja8zTzNg5noWbjiAW2dLpBqpkIiISCWGYXBH16Z88khfel8RSYnTzdMf7mTky5vJOllkdjzxUyokIiLyixrXrcNr93fjr7e1p06Alc37T9Jvxjre2JKJD8zLKj5GhURERM7JMAzu7tGc1VP6cHWLehSWuZj6bgajF6VxNK/E7HjiR1RIRETkgprXD2HZuJ78v4FtCbRZWLvnODe9sJb3vs7W2RK5JFRIRETEK1aLwQN9Ylk1uTfxTR3kl5TzyJvbmPDPr8g9U2p2PPFxKiQiIlIlV0SH8e7ERH5345XYLAaf7DjGTS+sY/W3R8yOJj5MhURERKrMZrXw0PWt+SCpF20ahnGysIwJ/9zKlGVfk1fkNDue+CAVEhERuWjtGjv4IKkXk65rhcWA9785zE0z1pLyXY7Z0cTHqJCIiMivYrdZeezmNrwzMZHYqBCO5ZcyZlEaf3hnOwUlOlsi3lEhERGRS6Jzs3qsmtyH+3u3xDBgWVoW/WasJ3VfrtnRxAeokIiIyCUTFGDlT7fE8cbYHsRE1OHQ6WJGLviSp1bsoLjMZXY8qcFUSERE5JLrEVufjx/uy8juzQBYnPoDA2au56uDJ01OJjWVComIiFSLULuN/x3SgVfv60bD8CAO5BZy59xN/P3j3ZSW62yJVKZCIiIi1eqaK6P45JG+3N6lCW4PzF27j1uTN/DtoTyzo0kNokIiIiLVzlEngOeHdWLe3V2JDA1kz7Ez3DZ7IzM+24PT5TY7ntQAKiQiInLZ3NyuIZ9M6Uv/9g0pd3uY8dlehry0kT3HCsyOJiZTIRERkcuqfqidl+7qwovDO+GoE8C3h/K5ZeYG5q3dh8utifpqKxUSERG57AzDYHCnJqx5pC+/aRNNmcvN9I93M2zeJg7kFpodT0ygQiIiIqZpEB7EK/cm8MzQeELtNr46eIr+L67j1dQfcOtsSa2iQiIiIqYyDINhV8ewekofElvVp8Tp5s8rdjDqlS/JPlVkdjy5TFRIRESkRmhaL5h/3t+dpwe3o06AldR9J+g3Yz1vpmXi8ehsib9TIRERkRrDYjG4p2cLVj3ch67N63GmtJzfv5PBfYvTOJZfYnY8qUYqJCIiUuO0jAzhrfE9eWJAGwKtFlK+O85NL6zjg28O6WyJn1IhERGRGslqMRjXtxUfTu5NhyYO8oqdPLzsGx58fSsnzpSaHU8uMRUSERGp0a5sEMa7DybyyA1XYrMYfPztUW56YR2f7DhqdjS5hFRIRESkxguwWnj4hta8P6kXVzYI5URhGeNf+4pH3/yGvCKn2fHkElAhERERn9G+iYOVD/Vm4rWtsBjw7teHuHnGOtbuOW52NPmVVEhERMSn2G1Wft+vDcsnJNIyMoSj+SXcu3ALU9/N4Expudnx5CIZnip8XTkrK4tVq1bhcDgoLi5mzJgxP1untLSUYcOG8cgjj3DttddWaey55Ofn43A4yMvLIzw83OtxIiLi34rLXPzf6t0sTv0BgKb16vDcnR3pEVvf3GACVO39u0pnSJ5++mnGjRvH8OHDiY2NZenSpZUeP3z4MM8//zylpT//9vOFxoqIiFRVnUArTw1qx9Kx3WlStw7Zp4oZPn8zf1m5g+Iyl9nxpAq8LiQZGRk4nU4MwwAgMTGR5OTkSuuEhYUxdepUGjZsWOWxIiIiFyuxVSSrp/RhRLcYABZt/IGBM9ezNfOUycnEW14XkrS0tEpFIyAggMzMTMrL//N5XVhY2EWP/anS0lLy8/MrLSIiIucTFhTA9NvjWTTmahqE29mfW8gdc1J5ZvVuSst1tqSm87qQ5OTkYLfbK91ntVrJzc295GOnT5+Ow+GoWGJiYryNKSIitdx1V0WzZso1DOncBLcHXvpiH4NnbeTbQ3lmR5Pz8LqQREdHU1JSeR4Bl8tFZGTkJR87depU8vLyKpasrCxvY4qIiOAIDuCF33Zi7qgu1A8JZPfRAm6bvZGZ/9qL0+U2O578Aq8LSUJCQqVi4HQ6iYmJwWazXfKxdrud8PDwSouIiEhV9WvfiE8e6Uu/dg0pd3t4/tM9DJ2Tyt5jBWZHk//idSGJj4/HYrFQVlYGQGpqKklJSaSkpJCSknJRY0VERKpbZKidOaO6MOO3nQgPsrE9O4+ByRtYsG4/Lrcm6qspqnQdkuzsbJYvX05ERAQlJSWMHz+eyZMnAzBz5kwA1q1bx4MPPsj1119f6Rc3vzTWW7oOiYiIXApH80r4w7vb+eK7s1d2TWhej+fu7EiLyBCTk/mnqrx/V6mQmEWFRERELhWPx8ObaVn89cOdFJa5qBNg5YkBbbire3MsFsPseH6l2i6MJiIi4usMw2B4t2asntKXHrERFDtd/OmDHdyzcAuHThebHa/WUiEREZFaKSYimKUP9ODPt8YRFGBhw/e59HthHW+lZ+EDHx74HRUSERGptSwWgzG9WrJqch86N6tLQWk5j7+9nQdeTScnv+TCTyCXjAqJiIjUerFRobw9IZHf92tDoNXCv3bncNOMdazcdtjsaLWGComIiAhgtRhMvLYVKx/qTbvG4ZwucvLQG18z6fWtnCwsMzue31MhERER+YmrGobx/qRePHx9a6wWg48yjnDTC2v5dOcxs6P5NRUSERGR/xJgtfDIjVfy/oO9aB0dSu6ZMsYuSed3b20jr9hpdjy/pEIiIiJyDh2aOlj5UG/GXxOLYcA7W7PpN2Md6/YcNzua31EhEREROY+gACtT+7dl+fietKgfzJG8Eu5ZuIU/vpdBYWm52fH8hgqJiIiIFxJaRLDq4T7c27M5AK9/mUn/F9fz5f4TJifzDyokIiIiXgoOtPGXwe15/YHuNKlbh8yTRQxfsJm/friTEqfL7Hg+TYVERESkinpdEcnqKX34bUIMHg+8suEAA2au55us02ZH81kqJCIiIhchLCiA/7sjnoWjE4gKs7P/eCG3v7SR5z75jrJyt9nxfI4KiYiIyK/wmzYNWDOlL4M6NsbtgVkp3zNo1gZ2Hs43O5pPUSERERH5leqFBDJzRGdmj+xCveAAdh8tYPDsDcz6fC/lLp0t8YYKiYiIyCUyML4Rax65hhvjGuB0eXhuzR6Gzknl+5wzZker8VRIRERELqGoMDvz7+7K88M6EhZkY1t2HgNnrufl9ftxuz1mx6uxVEhEREQuMcMwuL1LU9Y80pe+V0ZRWu7mbx/tYviCzWSeKDI7Xo2kQiIiIlJNGjnq8OqYq/nfIR0IDrSy5cBJ+r24jn9uPojHo7MlP6VCIiIiUo0Mw2Bk92asfrgv3VpGUFTm4v+9/y33LNzC4dPFZserMVRIRERELoNm9YNZNrYHf7olDrvNwvq9udw8Yx1vf5WtsyWokIiIiFw2FovB/b1bsurhPnSKqUtBSTn/s3wbY5d8RU5BidnxTKVCIiIicpm1igrl7Qk9eezmqwiwGny26xg3v7COj7YfMTuaaVRIRERETGCzWph03RWsSOpN20bhnCpyMmnpVpKWbuVUYZnZ8S47FRIRERETtW0UzgeTevHQb67AajH4cPsRbpqxjs92HjM72mWlQiIiImKyQJuF3910Fe9OTKRVVAjHC0p5YEk6jy3fRn6J0+x4l4UKiYiISA3RMaYuH03uw9g+LTEMWP5VNv1eWMeGvblmR6t2KiQiIiI1SFCAlT8OjOPNcT1pFhHM4bwSRr3yJX96/1uKysrNjldtVEhERERqoG4tI/j44T7c3aM5AK9tPkj/F9eT9sNJk5NVDxUSERGRGirEbuOvt7Xntfu70cgRxMETRQybt4lpH+2kxOkyO94lpUIiIiJSw/VpHcUnj/Tlzq5N8XhgwfoD3JK8gW1Zp82OdsmokIiIiPiA8KAAnr2zIy/fk0BkqJ3vc85w+5xUnl/zHWXlbrPj/WoqJCIiIj7khrgGfPpIX26Jb4TL7WHm599z2+yN7D6ab3a0X0WFRERExMfUCwlk1sguJI/oTN3gAHYeyefW5A3MTvmecpdvni1RIREREfFRt3ZszJpH+nJD22icLg/PfvIdd8zdxL7jZ8yOVmUqJCIiIj4sOiyIBfck8NydHQmz2/gm6zQDXlzPwg0HcLs9ZsfzmgqJiIiIjzMMgzu6NuWTR/rS+4pISsvdPP3hTkYs2EzWySKz43lFhURERMRPNK5bh9fu78Zfb2tPnQArXx44Sb8Z61j6ZSYeT80+W3LZC4nH4yEzM5OVK1de7pcWERHxe4ZhcHeP5qye0oerW9SjsMzFE+9lcO+iNI7mlZgd75wMTxUqU1ZWFqtWrcLhcFBcXMyYMWN+ts6bb76J2+2muLiY7t27065dOwDS09MZMGAAgYGBALz66qtcf/31Xr1ufn4+DoeDvLw8wsPDvY0rIiJSq7ncHhZtPMAzn5y9Vkl4kI2nBrVjSOcmGIZR7a9flffvKhWSsWPHMn/+fAzDYO3atRw6dIiRI0dWPL5u3ToOHjzI3XffDcDEiROZPXs2FouFzz//nLi4OBo2bFitGyQiIiKVfZ9TwO/e2sa27DwAboprwLQhHYgKs1fr61bl/dvrj2wyMjJwOp0VjSoxMZHk5ORK67z44ov07t274nZUVBQff/wxAAUFBdSvX9/rjRAREZFL44roMN6ZmMj/3HQlAVaDNTuPcfOMdazKOGJ2tApeF5K0tLRKZzcCAgLIzMykvLy80jqNGjWquN2oUSPS0tKAs4Wkbdu2REVFMXHiREpKzv05VmlpKfn5+ZUWERERuXg2q4Wk37Tm/Um9aNMwjJOFZTz4+lYmv/E1p4vKzI7nfSHJycnBbq98asdqtZKbm3vOdex2O0ePHgWga9eupKenc+DAAQoKCpg2bdo5X2v69Ok4HI6KJSYmxusNEhERkXNr19jBB0m9mHRdKywGrNh2mJteWMfnu4+ZmsvrQhIdHf2zsxoul4vIyMhzrlNWVkaDBg0AaNu2LXXr1iU0NJR58+bx6aefnvO1pk6dSl5eXsWSlZXl9QaJiIjI+dltVh67uQ3vTEwkNiqEnIJS/vbRLpwmXnbe60KSkJBQqRg4nU5iYmKw2WwV91199dWV1jl69CgJCQk/e66QkJCKovJL7HY74eHhlRYRERG5tDo3q8eqyX24v3dL/nFnRwKs5l2ezOtXjo+Px2KxUFZ29nOm1NRUkpKSSElJISUlBYApU6awZs2aijFHjhxh4MCBAOzfv7/i/pSUFPr3739JNkBEREQuXlCAlT/dEkfnZvVMzVGln/1mZ2ezfPlyIiIiKCkpYfz48UyePBmAmTNnAvDaa68BcPr0aa699lo6dOhAUVERQ4cOpUWLFnTt2hWbzcbo0aO9Dqmf/YqIiPiearsOiVlUSERERHxPtVyHRERERKS6qJCIiIiI6VRIRERExHQqJCIiImI6FRIRERExnQqJiIiImE6FREREREynQiIiIiKmUyERERER06mQiIiIiOlUSERERMR0NrMDeOPH6Xby8/NNTiIiIiLe+vF925tp83yikBQUFAAQExNjchIRERGpqoKCAhwOx3nX8YnZft1uN4cPHyYsLAzDMC7pc+fn5xMTE0NWVpZfziSs7fN9/r6N/r594P/bqO3zfdW1jR6Ph4KCAho3bozFcv5vifjEGRKLxULTpk2r9TXCw8P99h8aaPv8gb9vo79vH/j/Nmr7fF91bOOFzoz8SF9qFREREdOpkIiIiIjpan0hsdvt/PnPf8Zut5sdpVpo+3yfv2+jv28f+P82avt8X03YRp/4UquIiIj4t1p/hkRERETMp0IiIiIiplMhEREREdOpkNRyHo+HzMxMVq5caXaUX620tJQFCxaYHeOy86d9WBv50/7TMej7+9BMPnFhtIuVlZXFqlWrcDgcFBcXM2bMmJ+t8+abb+J2uykuLqZ79+60a9fO67Fmu1BGt9vNH/7wB9LS0jhx4gTTpk3j1ltvBSA9PZ0BAwYQGBgIwKuvvnrZ83vDm/1w5513smnTJgA6duzI2LFjvR5rtgtlvPLKKzl58mTF7bKyMl5++WWGDRvmM/vws88+Y8aMGXz44Ye/+LgvH4Nw/u3zh2MQLrwPffkYhPNvnz8cg2lpaTz99NMcOnSIq666igULFhAaGlppnRpxHHr82AMPPOBxu90ej8fj+eKLLzyvv/56pcfXrl3rWbJkScXtCRMmeFwul1dja4ILZXz11Vc9X3/9tcfj8Xj27NnjiYyM9OTm5no8Ho/nX//6l+fIkSOXNe/F8GY/nGvf+MM+XLVqVaXbzzzzjKesrMzj8fjGPnzrrbc8zzzzjOeaa675xcd9/Ri80Pb5wzF4oW30eHz7GLzQ9vn6MVhaWur54x//6HE6nR6Px+MZO3as5/HHH6+0Tk05Dv32I5uMjAycTmfF3DeJiYkkJydXWufFF1+kd+/eFbejoqL4+OOPvRprNm8yxsXF0alTJwBat25NixYtOHjwIHB2oqP69etf1sxV5e1++PF/Jxcz1kzeZOzfv3/F306nE4/HQ0BAAOAb+7Bfv37ceeed53zcl49BuPD2+foxCBfeRvDdYxAuvH2+fgwePXqUhx9+GJvt7AcigwcPZteuXZXWqSnHod8WkrS0NBo2bFhxOyAggMzMTMrLyyut06hRo4rbjRo1Ii0tzauxZvMmY0JCQsXfpaWllJSUEBcXB5w9kNq2bUtUVBQTJ06kpKTk8oX3krf7YebMmdStW5f4+HjWrVtXpbFmqmrGjz/+mJtuuqniti/sw7CwsPM+7svHIFx4+3z9GIQLbyP47jEI3m3fj3zxGGzWrBlRUVEVt3fs2FFpG6DmHId+W0hycnJ+dsU5q9VKbm7uOdex2+0cPXrUq7Fmq2rGWbNm8fzzzxMUFARA165dSU9P58CBAxQUFDBt2rRqz1xV3m7jM888w6lTp0hOTuaee+7hxIkTfrkPt27dWvG/bfCNfXghvnwMVpUvHoPe8tVjsKp8/Rg8efIkO3bsYMKECZXurynHod8Wkujo6J+1VZfLRWRk5DnXKSsro0GDBl6NNVtVMq5du5bY2FhuvPHGivvatm1L3bp1CQ0NZd68eXz66afVnrmqvN3GHj16YBgG11xzDSNHjiQ1NdXv9mFhYSHBwcGV7vOFfXghvnwMVoWvHoPe8tVjsCp8/Rh0Op3MmjWLWbNmVXx886Oachz6bSFJSEggKyur4rbT6SQmJqbSjrj66qsrrXP06FESEhK8Gms2bzOmp6dTWFjIkCFDzvlcISEhNGjQoNqyXqyL2Q+NGjWiTp06frUPAVavXs2AAQPO+Vw1dR9eiC8fg97y5WPwYvjSMVgVvnwMut1uXnrpJR599NFf/IiqphyHfltI4uPjsVgslJWVAZCamkpSUhIpKSmkpKQAMGXKFNasWVMx5siRIwwcOPCcY2sSb7YvIyODnTt3VhxETqeTxYsXA7B///6K50pJSan0xa2awpttPHLkCMXFxcDZawF888039OzZ02/24Y92795N+/btK93nC/vwl/jLMXgu/nQMnou/HIPn4m/H4DPPPMOoUaMqfuq7ZMkSPvnkkxp3HPr15HrZ2dksX76ciIgISkpKGD9+PJMnTwbOfgkL4LXXXgPg9OnTXHvttXTo0OGcY2ua823fs88+S5cuXSq+HQ1w4sQJnnjiCe6//36GDh1KixYt6Nq1KzabjdGjR5u0Fed3oX34+uuvs3jxYvr164fVamXgwIG0bt36nGNrGm/+jcLZ/fnYY49V3C4qKvKJfZibm8ucOXOYO3cuS5Ys4frrr/erY/B82+cvx+CF9qGvH4Pe/BsF3z0GX331Vf7whz9U/BrI7XZz8uRJhg0bBtSs49CvC4mIiIj4Br/9yEZERER8hwqJiIiImE6FREREREynQiIiIiKmUyERERER06mQiIiIiOlUSERERMR0KiQiIiJiOhUSERERMZ0KiYiIiJhOhURERERMp0IiIiIiplMhEREREdP9f8Pb9NY4Zro/AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(res.index, res['rate'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2bde9254",
   "metadata": {},
   "source": [
    "## 消费者价格指数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "2bb6d435",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.870830Z",
     "start_time": "2024-10-29T17:16:50.852724Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[92.86800003]\n",
      "-1\n"
     ]
    }
   ],
   "source": [
    "colname = '消费者价格指数'\n",
    "x = train[colname]\n",
    "bins = decision_tree_binning(x, y, max_leaf_node=2)\n",
    "print(bins)\n",
    "direction = check_monotonicity(x, y, bins)\n",
    "print(direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "8dfc3d9e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:50.890509Z",
     "start_time": "2024-10-29T17:16:50.871424Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>消费者价格指数</th>\n",
       "      <th>是否订阅</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>消费者价格指数</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2483</td>\n",
       "      <td>999</td>\n",
       "      <td>0.402336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>38705</td>\n",
       "      <td>3641</td>\n",
       "      <td>0.094071</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         消费者价格指数  是否订阅      rate\n",
       "消费者价格指数                         \n",
       "0           2483   999  0.402336\n",
       "1          38705  3641  0.094071"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['消费者价格指数'] = np.digitize(x, bins, right=True)\n",
    "res = train.groupby(by='消费者价格指数').agg(func={'消费者价格指数': 'count', '是否订阅': 'sum'})\n",
    "res['rate'] = res['是否订阅'] / res['消费者价格指数']\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "57bf445f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:51.099862Z",
     "start_time": "2024-10-29T17:16:50.890509Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f034dae050>]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(res.index, res['rate'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e45081e1",
   "metadata": {},
   "source": [
    "## 消费者信息指数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "c860c95a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:51.136559Z",
     "start_time": "2024-10-29T17:16:51.103599Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-35.44999886]\n",
      "1\n"
     ]
    }
   ],
   "source": [
    "colname = '消费者信息指数'\n",
    "x = train[colname]\n",
    "bins = decision_tree_binning(x, y, max_leaf_node=2)\n",
    "print(bins)\n",
    "direction = check_monotonicity(x, y, bins)\n",
    "print(direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "e37ed51c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:51.169836Z",
     "start_time": "2024-10-29T17:16:51.140091Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>消费者信息指数</th>\n",
       "      <th>是否订阅</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>消费者信息指数</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>38559</td>\n",
       "      <td>3521</td>\n",
       "      <td>0.091315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2629</td>\n",
       "      <td>1119</td>\n",
       "      <td>0.425637</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         消费者信息指数  是否订阅      rate\n",
       "消费者信息指数                         \n",
       "0          38559  3521  0.091315\n",
       "1           2629  1119  0.425637"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['消费者信息指数'] = np.digitize(x, bins, right=True)\n",
    "res = train.groupby(by='消费者信息指数').agg(func={'消费者信息指数': 'count', '是否订阅': 'sum'})\n",
    "res['rate'] = res['是否订阅'] / res['消费者信息指数']\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "2709bd3c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:51.333743Z",
     "start_time": "2024-10-29T17:16:51.172573Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f035b3fdf0>]"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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A7qbHU1ERCRgdehtvzNmzGD+/PnExcVht9uZNGkS+fn5wH8Lyccff8zq1aux2WwMGTKk7WTW71vX19TbXTzwr7UsK98HwM/SevHkuHS6RYWbnExERCSwWQzDMMwOcTz19fXYbDbq6uqIjY09KY9RVnWEvEUlVB1qISzEwgOXp/GLs5Pb3qosIiIiHdOR/XfQf3S8YRg8/9lOpr+7EZfboF/3LszPzSYjqZvZ0URERIJGUBeSI81O7luyluUb9gNw2bBE/nRDOrYuYSYnExERCS5BXUjeKN3N8g37CQ+x8vsr0/ifMwdoRCMiImKCoC4kPz8rmYqaRnJP78/wvjaz44iIiAStoC4kVquFJ64bYXYMERGRoOf1J7WKiIiInCwqJCIiImI6FRIRERExnQqJiIiImE6FREREREynQiIiIiKmUyERERER06mQiIiIiOlUSERERMR0KiQiIiJiOhUSERERMZ0KiYiIiJhOhURERERM5xff9msYBgD19fUmJxERERFvfb3f/no//kP8opA0NDQAkJSUZHISERER6aiGhgZsNtsPLmMxvKktJvN4POzZs4eYmBgsFssJ/dn19fUkJSVRVVVFbGzsCf3Z8l/azp1D27lzaDt3Dm3nznOytrVhGDQ0NNCnTx+s1h8+S8QvjpBYrVb69et3Uh8jNjZWv/CdQNu5c2g7dw5t586h7dx5Tsa2Pt6Rka/ppFYRERExnQqJiIiImC7oC0lERAQPP/wwERERZkcJaNrOnUPbuXNoO3cObefO4wvb2i9OahUREZHAFvRHSERERMR8KiQiIiJiOhUSERERMZ0KiYjICfLhhx/yt7/9zewYIn4paE5qraqqYtmyZdhsNlpaWrj11lu/s8yrr76Kx+OhpaWFM844g2HDhpmQ1L8dbzt7PB4eeOABiouLOXjwII8//jhXXXWVSWn9mze/019bsmQJTU1N/PznP+/EhIHBm+3s8XiYMmUK2dnZ/PKXvzQhpf/zZjvPmTOHHj16sG/fPgYMGMANN9xgQlL/t2LFCp555hneeeed773ftH2hESR+9atfGR6PxzAMw1i5cqXx8ssvt7t/1apVxksvvdR2/fbbbzfcbnenZgwEx9vOL774olFaWmoYhmFs2bLFiI+PN2prazs7ZkA43rb+2oYNG4wzzjjDeP755zsxXeDwZjvffffdxvTp0zs7WkA53nZeunRpu9/hiy66yGhubu7MiAHhtddeM/785z8b559//vfeb+a+MChGNuXl5bhcrrbvwcnJyWHu3Lntlpk9ezbnnHNO2/WePXvy7rvvdmpOf+fNdh46dCiZmZkApKamkpyczK5duzo7qt/zZlvD0S+0+uCDD7jssss6O2JA8GY7l5aWsnz5cu6//34zIgYEb7bztm3biImJabveq1cv3G53p+YMBJdddhnjxo075v1m7guDopAUFxeTmJjYdj0sLIzKykpaW1vbLdO7d++2671796a4uLhTc/o7b7bzqFGj2v7tcDiw2+0MHTq0U3MGAm+2NcCzzz7LHXfc0dnxAoY323nBggX84he/YMuWLUybNo05c+aYEdWvebOdb7zxRubNm8f69eupr68nNzeX6OhoM+L6tW+Wuu9j5r4wKApJTU3Ndz59LiQkhNra2mMuExERwb59+zotYyDwZjt/07x585g1axaRkZGdES+geLOtX3jhBcaOHUt4eHhnxwsY3mznL774gpycHIYMGcITTzzBwoULqays7Oyofs2b7dy3b1+mT59OcXExDz74IPv37+/smEHBzH1hUBSShIQE7HZ7u9vcbjfx8fHHXMbpdNKrV69OyxgIvNnOX1u1ahUpKSlcfPHFnRUvoBxvW9vtdp577jnuuecerr32Wl555RXmzJlDXl6eGXH9lje/03a7nbi4uLbrw4YN46uvvuq0jIHAm+28cuVKiouLueWWW5g9ezYrV67k9ddf7+yoAc/MfWFQFJJRo0ZRVVXVdt3lcpGUlERoaGjbbaeddlq7Zfbt29duvCDH5812Bli9ejVNTU1cd911nR0xYBxvW0dGRvLpp5+ydOlSli5dyoQJE8jPz2fevHlmRfZL3vxO9+/fv91f662trfrulQ7yZjsvXryYQYMGtV0fP348H330UafmDAZm7guDopCkp6djtVpxOp0AFBUVkZeXR2FhIYWFhQD85je/4YMPPmhbZ+/evVxxxRWm5PVX3mzn8vJyNmzYwJgxY4CjLzwvvPCCWZH9ljfbWn46b7bzxIkTWbp0ads61dXV5OTkmBHXb3mznQcOHMjGjRvb1tm8eTNnn322KXkDja/sC4Pmc0iqq6tZvHgxcXFx2O12Jk2aRH5+PkDbSWj//Oc/AThy5AgXXHABI0aMMC2vv/qh7Txz5kyys7PbzqQHOHjwINOmTWPKlClmRfZb3vxOf+2RRx4hOTmZW265xYSk/u1429nj8fDwww+TnJxMXV0dmZmZXHjhhSan9j/H285Op5Np06YxcOBAQkJCaGxs5K677jI5tf+pra3l2Wef5a9//SsvvfQSF110kc/sC4OmkIiIiIjvCoqRjYiIiPg2FRIRERExnQqJiIiImE6FREREREynQiIiIiKmUyERERER06mQiIiIiOlUSERERMR0KiQiIiJiOhUSERERMZ0KiYiIiJhOhURERERMp0IiIiIipvv/AKbu1Apre0zAAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(res.index, res['rate'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04a05365",
   "metadata": {},
   "source": [
    "## euribor 3月费率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "e1887c6d",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:51.385550Z",
     "start_time": "2024-10-29T17:16:51.338927Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.23949999 3.16750002]\n",
      "-1\n"
     ]
    }
   ],
   "source": [
    "colname = 'euribor 3月费率'\n",
    "x = train[colname]\n",
    "bins = decision_tree_binning(x, y, max_leaf_node=3)\n",
    "print(bins)\n",
    "direction = check_monotonicity(x, y, bins)\n",
    "print(direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "2d0ae518",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:51.419260Z",
     "start_time": "2024-10-29T17:16:51.390228Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>euribor 3月费率</th>\n",
       "      <th>是否订阅</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>euribor 3月费率</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4305</td>\n",
       "      <td>1961</td>\n",
       "      <td>0.455517</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>9194</td>\n",
       "      <td>1341</td>\n",
       "      <td>0.145856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>27689</td>\n",
       "      <td>1338</td>\n",
       "      <td>0.048322</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              euribor 3月费率  是否订阅      rate\n",
       "euribor 3月费率                              \n",
       "0                     4305  1961  0.455517\n",
       "1                     9194  1341  0.145856\n",
       "2                    27689  1338  0.048322"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['euribor 3月费率'] = np.digitize(x, bins, right=True)\n",
    "res = train.groupby(by='euribor 3月费率').agg(func={'euribor 3月费率': 'count', '是否订阅': 'sum'})\n",
    "res['rate'] = res['是否订阅'] / res['euribor 3月费率']\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "d457c813",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:51.683843Z",
     "start_time": "2024-10-29T17:16:51.423006Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f035bcde40>]"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiQAAAGdCAYAAAAi3mhQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABBPElEQVR4nO3dfXSU9Z3//+fMJJmQkAwEEghh2oCADSYhkITaLN9FF90K2RbQn9BSqomISBfZuqd1i121x68erHffKkoFPSaAK3RxV9Ctd7BG2G6kJpggCKGWuwwhgSaWTAiZzGRmfn8go5G7GUhyzUxej3PmHGbmumZel8PlvJi85xOT3+/3IyIiImIgs9EBRERERFRIRERExHAqJCIiImI4FRIRERExnAqJiIiIGE6FRERERAynQiIiIiKGUyERERERw8UYHSAYPp+PY8eOkZSUhMlkMjqOiIiIBMHv99PW1saIESMwmy/+GUhEFJJjx45ht9uNjiEiIiKXweFwMHLkyItuExGFJCkpCThzQMnJyQanERERkWA4nU7sdnvgffxiIqKQnP0xTXJysgqJiIhIhAlm3EJDrSIiImI4FRIRERExnAqJiIiIGE6FRERERAynQiIiIiKGUyERERERw6mQiIiIiOFUSERERMRwKiQiIiJiOBUSERERMZwKiYiIiBiu3xcSv99vdAQREZF+r18XklOdXdxeVsWmmgajo4iIiPRrfV5I/H4/9fX1vPnmm3391OfY8FE92//0F37+2i4q/9xsdBwREZF+K6RC4nA4WLVqFRs2bKCsrOyi27722musWbMmcL26upq0tDTsdjtFRUUkJCRcXuIedMffjKI4Nx2P18+idTupa3IaHUlERKRfCqmQPPzww9x111384Ac/YPTo0bz66qvn3W7fvn08+eST3eYznE4nn3zyCUePHuXo0aNMmzbtypL3ALPZxFO3TmByZgptnV2UllXR2NphdCwREZF+J+hCsnv3bjweDyaTCYCioiJWrFhxznZtbW2899573HTTTefcPmTIkCuM2/PiYy2svi2fMWkDaWx1UVpWhdPlMTqWiIhIvxJ0IamqqmL48OGB67GxsdTX19PV1dVtu9/+9rcsXrz4nP3b2trIysoiNTWVxYsX43K5LvhcnZ2dOJ3ObpfeNCghjvLSQlKTrNQ1tXH3up24u3y9+pwiIiLy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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(res.index, res['rate'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a61c501",
   "metadata": {},
   "source": [
    "## 员工人数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "9a59899c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:51.716913Z",
     "start_time": "2024-10-29T17:16:51.687752Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[5087.65014648 5183.64990234]\n",
      "-1\n"
     ]
    }
   ],
   "source": [
    "colname = '员工人数'\n",
    "x = train[colname]\n",
    "bins = decision_tree_binning(x, y, max_leaf_node=3)\n",
    "print(bins)\n",
    "direction = check_monotonicity(x, y, bins)\n",
    "print(direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "95945ebd",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:51.750270Z",
     "start_time": "2024-10-29T17:16:51.718970Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>员工人数</th>\n",
       "      <th>是否订阅</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>员工人数</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4964</td>\n",
       "      <td>2209</td>\n",
       "      <td>0.445004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>8544</td>\n",
       "      <td>1093</td>\n",
       "      <td>0.127926</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>27680</td>\n",
       "      <td>1338</td>\n",
       "      <td>0.048338</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       员工人数  是否订阅      rate\n",
       "员工人数                       \n",
       "0      4964  2209  0.445004\n",
       "1      8544  1093  0.127926\n",
       "2     27680  1338  0.048338"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['员工人数'] = np.digitize(x, bins, right=True)\n",
    "res = train.groupby(by='员工人数').agg(func={'员工人数': 'count', '是否订阅': 'sum'})\n",
    "res['rate'] = res['是否订阅'] / res['员工人数']\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "3c58c242",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.083528Z",
     "start_time": "2024-10-29T17:16:51.754279Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f035907280>]"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(res.index, res['rate'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60eb907a",
   "metadata": {},
   "source": [
    "# 卡方检验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "6d9929ce",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.099821Z",
     "start_time": "2024-10-29T17:16:52.088438Z"
    }
   },
   "outputs": [],
   "source": [
    "def chi2_test(var, target, pvalue=0.05):\n",
    "    contingency_table = pd.crosstab(var, target)\n",
    "    chi2, p, dof, expected = chi2_contingency(contingency_table)\n",
    "    \n",
    "    if p < pvalue:\n",
    "        print('存在显著差异！')\n",
    "    else:\n",
    "        print('不存在显著差异！')\n",
    "        \n",
    "    print(f\"Chi2 Statistic: {chi2:.4f}\")  \n",
    "    print(f\"P-value: {p:.4f}\")  \n",
    "    print(f\"Degrees of Freedom: {dof}\")  \n",
    "#     print(\"Expected Frequencies:\")  \n",
    "#     print(expected)\n",
    "    return p"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3edd47f8",
   "metadata": {},
   "source": [
    "## 客户年龄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "d4fbc37d",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.134198Z",
     "start_time": "2024-10-29T17:16:52.102506Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 876.8828\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 6\n"
     ]
    }
   ],
   "source": [
    "colname = '客户年龄'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d9e9b22",
   "metadata": {},
   "source": [
    "## 工作类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "3b6ddc5a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.182713Z",
     "start_time": "2024-10-29T17:16:52.138041Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 961.2424\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 11\n"
     ]
    }
   ],
   "source": [
    "colname = '工作类型'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "36041cfa",
   "metadata": {},
   "source": [
    "## 婚姻状况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "7f6c4338",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.223175Z",
     "start_time": "2024-10-29T17:16:52.185779Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 122.6552\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 3\n"
     ]
    }
   ],
   "source": [
    "colname = '婚姻状况'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "910225bd",
   "metadata": {},
   "source": [
    "## 教育水平"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "e241d47e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.253909Z",
     "start_time": "2024-10-29T17:16:52.228073Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 193.1059\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 7\n"
     ]
    }
   ],
   "source": [
    "colname = '教育水平'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fe7b30b0",
   "metadata": {},
   "source": [
    "## 是否有过违约"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "95cb1e47",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.283773Z",
     "start_time": "2024-10-29T17:16:52.257009Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 406.5775\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 2\n"
     ]
    }
   ],
   "source": [
    "colname = '是否有过违约'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9fbae573",
   "metadata": {},
   "source": [
    "## 是否有住房贷款"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "011ee9b8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.319657Z",
     "start_time": "2024-10-29T17:16:52.285978Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "不存在显著差异！\n",
      "Chi2 Statistic: 5.6845\n",
      "P-value: 0.0583\n",
      "Degrees of Freedom: 2\n"
     ]
    }
   ],
   "source": [
    "colname = '是否有住房贷款'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77198671",
   "metadata": {},
   "source": [
    "## 是否有个人贷款"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "36ef2e23",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.350887Z",
     "start_time": "2024-10-29T17:16:52.321760Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "不存在显著差异！\n",
      "Chi2 Statistic: 1.0940\n",
      "P-value: 0.5787\n",
      "Degrees of Freedom: 2\n"
     ]
    }
   ],
   "source": [
    "colname = '是否有个人贷款'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aad236e8",
   "metadata": {},
   "source": [
    "## 联系方式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "7aafffe0",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.383549Z",
     "start_time": "2024-10-29T17:16:52.353385Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 862.3184\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 1\n"
     ]
    }
   ],
   "source": [
    "colname = '联系方式'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "097e6252",
   "metadata": {},
   "source": [
    "## 上次联系月份"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "138beea9",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.423169Z",
     "start_time": "2024-10-29T17:16:52.386542Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 3101.1494\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 9\n"
     ]
    }
   ],
   "source": [
    "colname = '上次联系月份'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b47caffc",
   "metadata": {},
   "source": [
    "## 上次联系周几"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "7e68a1e6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.450244Z",
     "start_time": "2024-10-29T17:16:52.423169Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 26.1449\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 4\n"
     ]
    }
   ],
   "source": [
    "colname = '上次联系周几'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a3f9995",
   "metadata": {},
   "source": [
    "## 最后一次通话时间"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "9cdc8412",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.487385Z",
     "start_time": "2024-10-29T17:16:52.452266Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 7337.3365\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 14\n"
     ]
    }
   ],
   "source": [
    "colname = '最后一次通话时间'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "11345fab",
   "metadata": {},
   "source": [
    "## 本次营销活动联系次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "ac0e9630",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.520712Z",
     "start_time": "2024-10-29T17:16:52.489639Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 208.3525\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 5\n"
     ]
    }
   ],
   "source": [
    "colname = '本次营销活动联系次数'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa6622b8",
   "metadata": {},
   "source": [
    "## 距离上次联系间隔天数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "f8d2d839",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:22:10.298919Z",
     "start_time": "2024-10-29T17:22:10.280395Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 4341.7247\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 1\n"
     ]
    }
   ],
   "source": [
    "colname = '距离上次联系间隔天数'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9caa0ab",
   "metadata": {},
   "source": [
    "## 上次营销活动联系次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "48087643",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.583644Z",
     "start_time": "2024-10-29T17:16:52.555958Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 1540.4987\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 1\n"
     ]
    }
   ],
   "source": [
    "colname = '上次营销活动联系次数'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74bdb48f",
   "metadata": {},
   "source": [
    "## 上次营销活动结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "05c93d53",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.616841Z",
     "start_time": "2024-10-29T17:16:52.586503Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 4230.5238\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 2\n"
     ]
    }
   ],
   "source": [
    "colname = '上次营销活动结果'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e25cbabc",
   "metadata": {},
   "source": [
    "## 就业变化率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "0eabc79e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.638455Z",
     "start_time": "2024-10-29T17:16:52.618847Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 4287.9702\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 2\n"
     ]
    }
   ],
   "source": [
    "colname = '就业变化率'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dc8d894a",
   "metadata": {},
   "source": [
    "## 消费者价格指数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "fc24c3a6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.657085Z",
     "start_time": "2024-10-29T17:16:52.639823Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 2215.0234\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 1\n"
     ]
    }
   ],
   "source": [
    "colname = '消费者价格指数'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c406200a",
   "metadata": {},
   "source": [
    "## 消费者信息指数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "24f1a3dc",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.688052Z",
     "start_time": "2024-10-29T17:16:52.657085Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 2748.5823\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 1\n"
     ]
    }
   ],
   "source": [
    "colname = '消费者信息指数'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b114e7f0",
   "metadata": {},
   "source": [
    "## euribor 3月费率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "40e163ab",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.716819Z",
     "start_time": "2024-10-29T17:16:52.688052Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 6310.3364\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 2\n"
     ]
    }
   ],
   "source": [
    "colname = 'euribor 3月费率'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ecaaeeb",
   "metadata": {},
   "source": [
    "## 员工人数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "87ebd8bd",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-10-29T17:16:52.754185Z",
     "start_time": "2024-10-29T17:16:52.718724Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "存在显著差异！\n",
      "Chi2 Statistic: 6650.4282\n",
      "P-value: 0.0000\n",
      "Degrees of Freedom: 2\n"
     ]
    }
   ],
   "source": [
    "colname = '员工人数'\n",
    "var = train[colname]\n",
    "target = train['是否订阅']\n",
    "p = chi2_test(var, target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dc3cce80",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ML",
   "language": "python",
   "name": "ml"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.10"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "279.6px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
